Skip to content

Commit

Permalink
chore: sync main (#160)
Browse files Browse the repository at this point in the history
* fix(core): remove unused dynamic nav dependency (#2132)

* fix(datastore): remove typename from ModelMetadata (#2122)

* fix(datastore): remove typename from ModelMetadata

* Test a potential fix

* Test a potential fix

* fix: callbacks not invoked when attached using getTransfer api (#2111)

* fix: listener not invoked when attached using getTransfer api

* address PR comments

* default state to unknown

* add comment

* add comment

* override getRequest in storage operation & make SocketExcpetion retryable

* add nullable annotation

* address nullable request

Co-authored-by: Tyler Roach <[email protected]>

* Prevent attempting to read backed up EncryptedSharedPreferences that are no longer readable (#2113)

* fix(auth): device metadata migration (#2114)

* Number of attributes being too high is not retryable (#2112)

* Number of attributes being too high is not retryable

* Match iOS at not retrying bad request error -- covering multiple 400 errors

* Fix lint

* Fix lint

* Update Kotlin SDK version

Co-authored-by: Thomas Leing <[email protected]>

* Change errors returned on some apis while federated (#2116)

* release: Amplify Android 2.0.0 (#2115)

* release: Amplify Android 2.0.0

* add core-kotlin changelog

* add more info in changelog

* revert unintended change

* remove breaking change for analytics

* fix(datastore): remove typename from ModelMetadata

* fix(datastore): remove typename from ModelMetadata

* remove unneeded file

* small cleanup

* remove print statements

* fix comment

* force tests

* force tests

* force tests

Co-authored-by: Michael Law <[email protected]>
Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Sunil Timalsina <[email protected]>

* chore: Remove deprecated maven plugin (#2137)

* Remove deprecated maven project

* Fix task name grep

* chore: Remove Javadoc tasks (#2139)

* Remove deprecated maven project

* Fix task name grep

* Remove Javadoc tasks

* fix: Change order of updating state in local cache (#2141)

* fix: fix integration test and added logger to integration test (#2143)

* fix: Change order of updating state in local cache

* change order for updating status and add logger to integ tests

* change log level to debug

* Fix for when move to idle state is called twice (#2152)

* Update README.md (#2120)

remove dev-preview APIs note.

* Dengdan stress test (#2153)

* Initial commit

* Work in progress

* finish codes

* change build

* update build

* test excludeStressTest

* Revert "Merge branch 'main' into dengdan-stress-test"

This reverts commit b50840e, reversing
changes made to 3bacf1b.

* remove categories

* remove external changes

* remove external changes

* remove more changes

* Update copyright and refactor

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* linting

* Update StorageStressTest.kt

* Delete StorageStressTest.kt

* Delete amplifyconfigurationupdated.json

* Delete amplifyconfigurationupdated.json

* Update DataStoreStressTest.kt

* Fix(Auth): Sign up if successful should return DONE instead of Confirm sign up (#2130)

* If sign up is successful in the first try return DONE

* Sign up should send DONE if it is successful

* revert jsongenerator cleandir fun

* lint fix

* Feat(Auth Test): Custom party testing for Custom Test without SRP (#2149)

* Adding custom auth test cases

* Updating test cases for Custom Auth to ensure they pass

* lint format

* Fix for phone number

* Recreate all tests

* Unignore storage and pinpoint tests (#2156)

* unignore tests

* extend timeout to 60s

Co-authored-by: Saijad Dhuka <[email protected]>

* feat(Geo): Add Kotlin Geo Facade (#2155)

* Add Kotlin Geo Facade

* Add return docs to the function comments

* Add tests to verify options are passed

* fix: Add missing apis in storage Kotlin & RxJava facade (#2160)

* fix: Add pause, resume api to kotlin and rxJava facade

* add unit tests

* remove irrelevant code changes

* add assertion

* Update DeviceFarm build config (#2168)

* fix: user metadata was persisted empty in the database (#2165)

* fix: usermeta was persisted as empty in the database

* fix compilation error

* fix compilation error

* avoid adding metadata if it is null

* Add Geo Rx Bindings (#2159)

* chore: Re-add storage tests (#2163)

* Readd storage tests

* rename file

* reduce stress

Co-authored-by: Saijad Dhuka <[email protected]>

* Add a network status listener to restart DataStore after the network … (#2148)

* Add a network status listener to restart DataStore after the network comes back online.

* Add Reachability monitor

* working pretty well

* cleanup

* update test

* fix: fix integration test and added logger to integration test (#2143)

* fix: Change order of updating state in local cache

* change order for updating status and add logger to integ tests

* change log level to debug

* Fix for when move to idle state is called twice (#2152)

* Update README.md (#2120)

remove dev-preview APIs note.

* Dengdan stress test (#2153)

* Initial commit

* Work in progress

* finish codes

* change build

* update build

* test excludeStressTest

* Revert "Merge branch 'main' into dengdan-stress-test"

This reverts commit b50840e, reversing
changes made to 3bacf1b.

* remove categories

* remove external changes

* remove external changes

* remove more changes

* Update copyright and refactor

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* linting

* Update StorageStressTest.kt

* Delete StorageStressTest.kt

* Delete amplifyconfigurationupdated.json

* Delete amplifyconfigurationupdated.json

* Update DataStoreStressTest.kt

* force build

* force build

* force build

* fix typo

* Add a network status listener to restart DataStore after the network comes back online.

* Add Reachability monitor

* working pretty well

* cleanup

* update test

* force build

* force build

* force build

* fix typo

* reply to comments

* Add testImplementation lin eto compile tests correctly in intellij

* reply to comments

* make ReachabilityMonitor expose the observable

* Update datastore plugin to use the reachability monitor

* cleanup

* cleanup

* cleanup

* force tests

Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: gpanshu <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: dengdan154 <[email protected]>

* chore: Upgrade Gradle, AGP, and KtLint (#2172)

* Remove deprecated maven project

* Fix task name grep

* Upgrade Gradle to 7.5.1

* Upgrade AGP

* Add VERSION_NAME back to BuildConfig

This was removed for library projects in AGP 4.1. We may consider renaming this in the future to disambiguate the Amplify version and the application version.

* Update KtLint and fix all new lint errors

* Use JDK11 on codebuild

* Use JDK11 in workflows

* Upgrade compileSdkVersion to 31

* Try using custom commands to install Android SDK 31

* Update device farm buildspec with manual Android SDK install

* Fix additional ktlint errors

* Upgrade Desugar to JDK11-compatible version

* Upgrade Robolectric

* Set locale explicitly to match expectation

* fix(geo): Increase Geo timeout so that it runs successfully on a Pixel 3a XL (#2177)

* Increase Geo timeout so that it runs successfully on a Pixel 3a XL

* Fix lint

Co-authored-by: Thomas Leing <[email protected]>

* Add a buildspec file for nightly tests (#2180)

* Chore(Auth): Implementation of the custom auth with SRP parity testing use case (#2167)

* Added the test case for custom auth with SRP

* ktlint

* release: Amplify Android 2.1.0 (manually created) (#2185)

Co-authored-by: Thomas Leing <[email protected]>

* chore: Add PR checker workflow (#2188)

* fix(Auth): Fix for when loading credentials the success/error is fired twice (#2184)

* chore: update changelog for Amplify Android 2.1.0 (#2193)

* feat(Auth): Overriding sign in when the State machine is already in the signing in state (#2187)

* chore: fix inconsistency with endpointWithAttributes test (#2196)

* chore: update changelog for v2.1.0 (#2198)

* chore: replace md5 with sha-256 for file data validation (#2199)

* chore: Remove unused version and group properties (#2186)

* chore: Add a label that will disable the PR title check (#2195)

Co-authored-by: gpanshu <[email protected]>

* chore: add release tag to PR title checker config (#2194)

Co-authored-by: Matt Creaser <[email protected]>

* fix(datastore): Fix lock contention issue when running DataStore.start() from the callback of DataStore.stop() (#2208)

Co-authored-by: Michael Schneider <[email protected]>

* chore: Add group and version back to all subprojects (#2213)

* chore: Remove the release-kotlin_v block from prepare release script (#2231)

* fix(core): Remove unused dependencies (#2207)

Co-authored-by: Matt Creaser <[email protected]>

* chore: Modify the bump_version branch name to be specific to the base branch (#2240)

* fix(geo): Bump MapLibre SDK to 9.6.0 (#2254)

* release: Amplify Android 2.1.1 (#2257)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* fix(analytics): Remove test dependencies from implementation configuration (#2253)

* chore: Ignore clearStopsSyncAndDeletesDatabase test (#2262)

* fix(auth): Fix Authorization header for HostedUI fetchToken when appSecret is used (#2264)

* chore: Supply base_branch when calling `create_next_release_pr` lane (#2245)

* chore: Update PR template to include security checklist item (#2251)

* feat(auth): add required hash param to cognito api calls (#2266)

Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: AWS Mobile SDK Bot <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>

* feat(datastore): Add recoverability improvements (#2201)

Co-authored-by: Matt Creaser <[email protected]>

* feat(auth): Added parity test for fetchDevices,rememberDevice,forgetDevice and fetchUserAttributes (#2174)

Co-authored-by: Sunil Timalsina <[email protected]>
Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: gpanshu <[email protected]>
Co-authored-by: AWS Mobile SDK Bot <[email protected]>

* release: Amplify Android 2.2.0 (#2269)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* chore: Convert build.gradle files to Kotlin (#2183)

* Convert build.gradle files to Kotlin

* Fix missing test dependency

* Update copyright year

* chore: Set the signing information in project extras (#2277)

* fix(auth): Moving credential provider to main (#2273)

* chore(analytics): Simplify error code checking, uniformly across platforms (#2274)

Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>

* feat(auth): added kover plugin for coverage (#2267)

Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: gpanshu <[email protected]>

* release: Amplify Android 2.2.1 (#2285)

Co-authored-by: amplify-android-dev+ghops <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>

* chore: Remove circleci configuration file (#2279)

Co-authored-by: gpanshu <[email protected]>

* fix(auth): fix npe in initialize fetch auth session (#2284)

Co-authored-by: Banji Jolaoso <[email protected]>

* fix(auth): Fix confirm signin when incorrect MFA code is entered (#2286)

* release: Amplify Android 2.2.2 (#2292)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* chore: Fix using amplify-android in a composite build (#2294)

* chore: update device farm configuration for nightly build (#2281)

* chore: remove buildspec files (#2308)

* chore: remove amplify-data from codeowners (#2252)

Co-authored-by: Saijad Dhuka <[email protected]>

* fix(datastore): Fix aliasing of column names (#2312)

* feat(storage): Add support for S3 acceleration mode (#2304)

* feat(aws-datastore): Make the reachability component configurable (#2307)

Signed-off-by: Manuel Iglesias <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>

* release: Amplify Android 2.3.0 (#2323)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* feat(aws-api,aws-datastore): WebSocket improvements (#2283)

Signed-off-by: Manuel Iglesias <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>

---------

Signed-off-by: Manuel Iglesias <[email protected]>
Co-authored-by: Erica Eaton <[email protected]>
Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Michael Law <[email protected]>
Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Sunil Timalsina <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>
Co-authored-by: gpanshu <[email protected]>
Co-authored-by: dengdan154 <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: amplify-android-dev+ghops <[email protected]>
Co-authored-by: banji180 <[email protected]>
Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: AWS Mobile SDK Bot <[email protected]>
Co-authored-by: Manuel Iglesias <[email protected]>
Co-authored-by: Dane Pilcher <[email protected]>
  • Loading branch information
20 people authored Mar 9, 2023
1 parent 2524e21 commit e3c40a9
Show file tree
Hide file tree
Showing 55 changed files with 925 additions and 415 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## [Release 2.3.0](https://github.com/aws-amplify/amplify-android/releases/tag/release_v2.3.0)

### Features
- **storage:** Add support for S3 acceleration mode ([#2304](https://github.com/aws-amplify/amplify-android/issues/2304))
- **aws-datastore:** Make the reachability component configurable ([#2307](https://github.com/aws-amplify/amplify-android/issues/2307))

### Bug Fixes
- **datastore:** Fix aliasing of column names ([#2312](https://github.com/aws-amplify/amplify-android/issues/2312))

[See all changes between 2.2.2 and 2.3.0](https://github.com/aws-amplify/amplify-android/compare/release_v2.2.2...release_v2.3.0)

## [Release 2.2.2](https://github.com/aws-amplify/amplify-android/releases/tag/release_v2.2.2)

### Bug Fixes
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ dependencies section:
```groovy
dependencies {
// Only specify modules that provide functionality your app will use
implementation 'com.amplifyframework:aws-analytics-pinpoint:2.2.2'
implementation 'com.amplifyframework:aws-api:2.2.2'
implementation 'com.amplifyframework:aws-auth-cognito:2.2.2'
implementation 'com.amplifyframework:aws-datastore:2.2.2'
implementation 'com.amplifyframework:aws-predictions:2.2.2'
implementation 'com.amplifyframework:aws-storage-s3:2.2.2'
implementation 'com.amplifyframework:aws-analytics-pinpoint:2.3.0'
implementation 'com.amplifyframework:aws-api:2.3.0'
implementation 'com.amplifyframework:aws-auth-cognito:2.3.0'
implementation 'com.amplifyframework:aws-datastore:2.3.0'
implementation 'com.amplifyframework:aws-predictions:2.3.0'
implementation 'com.amplifyframework:aws-storage-s3:2.3.0'
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;

Expand Down Expand Up @@ -71,7 +73,7 @@ public void setup() throws ApiException, JSONException {

final GraphQLResponse.Factory responseFactory = new GsonGraphQLResponseFactory();
final SubscriptionAuthorizer authorizer = new SubscriptionAuthorizer(apiConfiguration);
this.subscriptionEndpoint = new SubscriptionEndpoint(apiConfiguration, responseFactory, authorizer);
this.subscriptionEndpoint = new SubscriptionEndpoint(apiConfiguration, null, responseFactory, authorizer);

this.eventId = RandomString.string();
this.subscriptionIdsForRelease = new HashSet<>();
Expand Down Expand Up @@ -119,6 +121,51 @@ public void twoSubscriptionsToTheSameThing() throws ApiException {
assertNotEquals(firstSubscriptionId, secondSubscriptionId);
}

/**
* It uses a configurator if present.
*
* This test verifies that a configurator can add an interceptor and that it will be run when establishing
* subscriptions.
* @throws ApiException On failure to load API configuration from config file
* @throws JSONException On failure to manipulate configuration JSON during test arrangement
*/
@Test
public void usesConfiguratorIfPresent() throws ApiException, JSONException {
String endpointConfigKey = "eventsApi"; // The endpoint config in amplifyconfiguration.json with this name
JSONObject configJson = Resources.readAsJson(getApplicationContext(), R.raw.amplifyconfiguration)
.getJSONObject("api")
.getJSONObject("plugins")
.getJSONObject("awsAPIPlugin");
AWSApiPluginConfiguration pluginConfiguration = AWSApiPluginConfigurationReader.readFrom(configJson);
ApiConfiguration apiConfiguration = pluginConfiguration.getApi(endpointConfigKey);
assertNotNull(apiConfiguration);

final GraphQLResponse.Factory responseFactory = new GsonGraphQLResponseFactory();
final SubscriptionAuthorizer authorizer = new SubscriptionAuthorizer(apiConfiguration);

final AtomicInteger counter = new AtomicInteger();

final OkHttpConfigurator configurator = okHttpBuilder -> {
counter.incrementAndGet();

okHttpBuilder.addInterceptor(chain -> {
counter.incrementAndGet();

return chain.proceed(chain.request());
});
};

this.subscriptionEndpoint = new SubscriptionEndpoint(apiConfiguration, configurator, responseFactory,
authorizer);

String firstSubscriptionId = subscribeToEventComments(eventId);
assertNotNull(firstSubscriptionId);

subscriptionIdsForRelease.add(firstSubscriptionId);

assertEquals(2, counter.get());
}

/**
* Subscribe to comments on an event.
* @param eventId ID of event for which comments are being made
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@
@SuppressWarnings("TypeParameterHidesVisibleType") // <R> shadows >com.amplifyframework.api.aws.R
public final class AWSApiPlugin extends ApiPlugin<Map<String, OkHttpClient>> {
private final Map<String, ClientDetails> apiDetails;
private final Map<String, OkHttpConfigurator> apiConfigurators;
private final Map<String, OkHttpConfigurator> apiHttpClientConfigurators;
private final Map<String, OkHttpConfigurator> apiWebsocketUpgradeClientConfigurators;
private final GraphQLResponse.Factory gqlResponseFactory;
private final ApiAuthProviders authProvider;
private final ExecutorService executorService;
Expand Down Expand Up @@ -106,7 +107,8 @@ private AWSApiPlugin(@NonNull Builder builder) {
this.gqlApis = new HashSet<>();
this.executorService = Executors.newCachedThreadPool();
this.requestDecorator = new AuthRuleRequestDecorator(authProvider);
this.apiConfigurators = Immutable.of(builder.apiConfigurators);
this.apiHttpClientConfigurators = Immutable.of(builder.apiHttpClientConfigurators);
this.apiWebsocketUpgradeClientConfigurators = Immutable.of(builder.apiWebsocketUpgradeClientConfigurators);
}

/**
Expand Down Expand Up @@ -140,7 +142,7 @@ public void configure(
okHttpClientBuilder.addNetworkInterceptor(UserAgentInterceptor.using(UserAgent::string));
okHttpClientBuilder.eventListener(new ApiConnectionEventListener());

OkHttpConfigurator configurator = apiConfigurators.get(apiName);
OkHttpConfigurator configurator = apiHttpClientConfigurators.get(apiName);
if (configurator != null) {
configurator.applyConfiguration(okHttpClientBuilder);
}
Expand Down Expand Up @@ -174,8 +176,11 @@ public void configure(
} else if (EndpointType.GRAPHQL.equals(endpointType)) {
final SubscriptionAuthorizer subscriptionAuthorizer =
new SubscriptionAuthorizer(apiConfiguration, authProvider);
final OkHttpConfigurator websocketUpgradeConfigurator =
apiWebsocketUpgradeClientConfigurators.get(apiName);
final SubscriptionEndpoint subscriptionEndpoint =
new SubscriptionEndpoint(apiConfiguration, gqlResponseFactory, subscriptionAuthorizer);
new SubscriptionEndpoint(apiConfiguration, websocketUpgradeConfigurator, gqlResponseFactory,
subscriptionAuthorizer);
clientDetails = new ClientDetails(apiConfiguration,
okHttpClientBuilder.build(),
subscriptionEndpoint,
Expand Down Expand Up @@ -869,11 +874,13 @@ private void transitionTo(ApiEndpointStatus newStatus) {
*/
public static final class Builder {
private ApiAuthProviders apiAuthProviders;
private final Map<String, OkHttpConfigurator> apiConfigurators;
private final Map<String, OkHttpConfigurator> apiHttpClientConfigurators;
private final Map<String, OkHttpConfigurator> apiWebsocketUpgradeClientConfigurators;

private Builder() {
this.apiAuthProviders = ApiAuthProviders.noProviderOverrides();
this.apiConfigurators = new HashMap<>();
this.apiHttpClientConfigurators = new HashMap<>();
this.apiWebsocketUpgradeClientConfigurators = new HashMap<>();
}

/**
Expand All @@ -890,17 +897,33 @@ public Builder apiAuthProviders(@NonNull ApiAuthProviders apiAuthProviders) {

/**
* Apply customizations to an underlying OkHttpClient that will be used
* for a particular API.
* for a particular API's Http operations.
* @param forApiName The name of the API for which these customizations should apply.
This can be found in your `amplifyconfiguration.json` file.
* @param byConfigurator A lambda that hands the user an OkHttpClient.Builder,
* and enables the user to set come configurations on it.
* and enables the user to set some configurations on it.
* @return A builder instance, to continue chaining configurations
*/
@NonNull
public Builder configureClient(
@NonNull String forApiName, @NonNull OkHttpConfigurator byConfigurator) {
this.apiConfigurators.put(forApiName, byConfigurator);
this.apiHttpClientConfigurators.put(forApiName, byConfigurator);
return this;
}

/**
* Apply customizations to an underlying OkHttpClient that will be used
* for the WebSocket protocol upgrade of a particular API.
* @param forApiName The name of the API for which these customizations should apply.
This can be found in your `amplifyconfiguration.json` file.
* @param byConfigurator A lambda that hands the user an OkHttpClient.Builder,
* and enables the user to set some configurations on it.
* @return A builder instance, to continue chaining configurations
*/
@NonNull
public Builder configureWebSocketUpgradeClient(
@NonNull String forApiName, @NonNull OkHttpConfigurator byConfigurator) {
this.apiWebsocketUpgradeClientConfigurators.put(forApiName, byConfigurator);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import android.net.Uri;
import android.util.Base64;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.util.ObjectsCompat;

import com.amplifyframework.AmplifyException;
Expand Down Expand Up @@ -76,19 +77,25 @@ final class SubscriptionEndpoint {

SubscriptionEndpoint(
@NonNull ApiConfiguration apiConfiguration,
@Nullable OkHttpConfigurator configurator,
@NonNull GraphQLResponse.Factory responseFactory,
@NonNull SubscriptionAuthorizer authorizer
) throws ApiException {
) {
this.apiConfiguration = Objects.requireNonNull(apiConfiguration);
this.subscriptions = new ConcurrentHashMap<>();
this.responseFactory = Objects.requireNonNull(responseFactory);
this.authorizer = Objects.requireNonNull(authorizer);
this.timeoutWatchdog = new TimeoutWatchdog();
this.pendingSubscriptionIds = Collections.synchronizedSet(new HashSet<>());
this.okHttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(UserAgentInterceptor.using(UserAgent::string))
.retryOnConnectionFailure(true)
.build();

OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder()
.retryOnConnectionFailure(true);

if (configurator != null) {
configurator.applyConfiguration(okHttpClientBuilder);
}

this.okHttpClient = okHttpClientBuilder.build();
}

synchronized <T> void requestSubscription(
Expand Down Expand Up @@ -126,6 +133,7 @@ synchronized <T> void requestSubscription(
webSocket = okHttpClient.newWebSocket(new Request.Builder()
.url(buildConnectionRequestUrl(authType))
.addHeader("Sec-WebSocket-Protocol", "graphql-ws")
.header("User-Agent", UserAgent.string())
.build(), webSocketListener);
} catch (ApiException apiException) {
onSubscriptionError.accept(apiException);
Expand Down Expand Up @@ -332,7 +340,7 @@ private String buildConnectionRequestUrl(AuthorizationType authType) throws ApiE
return new Uri.Builder()
.scheme("wss")
.authority(authority)
.appendPath(path)
.path(path)
.appendQueryParameter("header", Base64.encodeToString(rawHeader, Base64.DEFAULT))
.appendQueryParameter("payload", "e30=")
.build()
Expand Down Expand Up @@ -490,7 +498,6 @@ public int hashCode() {
final class AmplifyWebSocketListener extends WebSocketListener {
private final CountDownLatch connectionResponse;
private final AtomicReference<EndpointStatus> endpointStatus;
private OkHttpClient okHttpClient;

AmplifyWebSocketListener() {
this(new CountDownLatch(1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,20 @@
import com.amplifyframework.api.ApiException.ApiAuthException;
import com.amplifyframework.api.aws.sigv4.AWS4Signer;

import aws.smithy.kotlin.runtime.net.Url;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider;
import aws.smithy.kotlin.runtime.http.DeferredHeaders;
import aws.smithy.kotlin.runtime.http.Headers;
import aws.smithy.kotlin.runtime.http.HttpMethod;
import aws.smithy.kotlin.runtime.http.Url;
import aws.smithy.kotlin.runtime.http.content.ByteArrayContent;
import aws.smithy.kotlin.runtime.http.request.HttpRequest;
import aws.smithy.kotlin.runtime.http.request.HttpRequestKt;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okio.Buffer;
Expand Down Expand Up @@ -79,7 +82,7 @@ public final okhttp3.Request decorate(okhttp3.Request req) throws ApiAuthExcepti
return null;
});

HttpRequest req2 = new HttpRequest(method, url, headers, body2);
HttpRequest req2 = HttpRequestKt.HttpRequest(method, url, headers, body2, DeferredHeaders.Companion.getEmpty());

HttpRequest request = v4Signer.signBlocking(req2, credentialsProvider, serviceName).getOutput();

Expand Down Expand Up @@ -124,8 +127,8 @@ private byte[] getBytes(RequestBody body) throws ApiAuthException {
return output.toByteArray();
} catch (IOException exception) {
throw new ApiAuthException("Unable to calculate SigV4 signature for the request",
exception,
"Check your application logs for details.");
exception,
"Check your application logs for details.");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package com.amplifyframework.auth.cognito

import aws.sdk.kotlin.services.cognitoidentity.CognitoIdentityClient
import aws.sdk.kotlin.services.cognitoidentityprovider.CognitoIdentityProviderClient
import aws.smithy.kotlin.runtime.http.endpoints.Endpoint
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint
import aws.smithy.kotlin.runtime.client.endpoints.EndpointProvider
import com.amplifyframework.statemachine.codegen.data.AuthConfiguration

interface AWSCognitoAuthService {
Expand All @@ -30,8 +31,8 @@ interface AWSCognitoAuthService {

CognitoIdentityProviderClient {
this.region = it.region
this.endpointResolver = it.endpoint?.let { endpoint ->
AWSEndpointResolver(Endpoint(endpoint))
this.endpointProvider = it.endpoint?.let { endpoint ->
EndpointProvider { Endpoint(endpoint) }
}
}
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -755,8 +755,7 @@ Builder storageAdapter(LocalStorageAdapter storageAdapter) {
* @param reachabilityMonitor An instance that implements LocalStorageAdapter.
* @return Current builder instance, for fluent construction of plugin.
*/
@VisibleForTesting
Builder reachabilityMonitor(ReachabilityMonitor reachabilityMonitor) {
public Builder reachabilityMonitor(ReachabilityMonitor reachabilityMonitor) {
this.reachabilityMonitor = reachabilityMonitor;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit
* The network changes are debounced with a 250 ms delay to allow some time for one network to connect after another
* network has disconnected (for example, wifi is lost, then cellular connects) to reduce thrashing.
*/
internal interface ReachabilityMonitor {
public interface ReachabilityMonitor {
fun configure(context: Context)
@VisibleForTesting
fun configure(context: Context, connectivityProvider: ConnectivityProvider)
Expand Down Expand Up @@ -99,7 +99,7 @@ private class ReachabilityMonitorImpl constructor(val schedulerProvider: Schedul
* is a concrete class created within context.getSystemService() it can't be overridden with a test
* implementation, so this interface works around that issue.
*/
internal interface ConnectivityProvider {
public interface ConnectivityProvider {
val hasActiveNetwork: Boolean
fun registerDefaultNetworkCallback(context: Context, callback: NetworkCallback)
}
Expand Down
Loading

0 comments on commit e3c40a9

Please sign in to comment.