├── .editorconfig ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── 1.bug_report.yaml │ ├── 2.feature_report.yaml │ └── config.yaml ├── PULL_REQUEST_TEMPLATE.md ├── pr-title-checker-config.json └── workflows │ ├── codecov_code_coverage.yml │ ├── issue_closed.yml │ ├── issue_comment.yml │ ├── issue_labeled.yml │ ├── issue_opened.yml │ ├── maven_release_publisher.yml │ ├── notify_pull_request.yml │ ├── notify_release.yml │ ├── pr_title_checker.yml │ ├── release_pr.yml │ ├── rollback_release.yml │ └── stale.yml ├── .gitignore ├── .idea └── codeStyles │ └── Project.xml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.md ├── annotations ├── .gitignore ├── build.gradle.kts ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── amplifyframework │ └── annotations │ ├── AmplifyFlutterApi.kt │ ├── InternalAmplifyApi.kt │ └── InternalApiWarning.kt ├── apollo ├── CHANGELOG.md ├── README.md ├── apollo-appsync-amplify │ ├── .gitignore │ ├── api │ │ └── apollo-appsync-amplify.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── gradle.properties │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ ├── backend │ │ │ ├── README.md │ │ │ ├── package-lock.json │ │ │ └── package.json │ │ ├── graphql │ │ │ ├── Mutations.graphql │ │ │ ├── Queries.graphql │ │ │ ├── Subscriptions.graphql │ │ │ ├── TodoFragment.graphql │ │ │ └── schema.json │ │ └── java │ │ │ └── com │ │ │ └── amplifyframework │ │ │ └── apollo │ │ │ ├── appsync │ │ │ └── ApolloAmplifyTest.kt │ │ │ └── testUtil │ │ │ ├── AuthorizerProviders.kt │ │ │ ├── TestUser.kt │ │ │ └── TestUtil.kt │ │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── amplifyframework │ │ │ └── apollo │ │ │ └── appsync │ │ │ ├── ApolloAmplifyConnector.kt │ │ │ └── util │ │ │ ├── AccessTokenProvider.kt │ │ │ ├── ApolloExtensions.kt │ │ │ ├── ApolloRequestSigner.kt │ │ │ └── Coroutines.kt │ │ └── test │ │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── apollo │ │ └── appsync │ │ ├── ApolloAmplifyConnectorTest.kt │ │ └── util │ │ ├── AccessTokenProviderTest.kt │ │ └── ApolloRequestSignerTest.kt ├── apollo-appsync │ ├── .gitignore │ ├── api │ │ └── apollo-appsync.api │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── amplifyframework │ │ │ └── apollo │ │ │ └── appsync │ │ │ ├── ApolloExtensions.kt │ │ │ ├── AppSyncAuthorizer.kt │ │ │ ├── AppSyncEndpoint.kt │ │ │ ├── AppSyncInterceptor.kt │ │ │ ├── AppSyncProtocol.kt │ │ │ ├── SubscriptionMessageType.kt │ │ │ ├── authorizers │ │ │ ├── ApiKeyAuthorizer.kt │ │ │ ├── AuthTokenAuthorizer.kt │ │ │ └── IamAuthorizer.kt │ │ │ └── util │ │ │ ├── HeaderKeys.kt │ │ │ ├── Iso8601Timestamp.kt │ │ │ ├── UserAgentHeader.kt │ │ │ └── WebSocketConnectionInterceptor.kt │ │ └── test │ │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── apollo │ │ └── appsync │ │ ├── ApolloExtensionsTest.kt │ │ ├── AppSyncEndpointTest.kt │ │ ├── AppSyncInterceptorTest.kt │ │ ├── AppSyncProtocolTest.kt │ │ ├── authorizers │ │ ├── ApiKeyAuthorizerTest.kt │ │ ├── AuthTokenAuthorizerTest.kt │ │ └── IamAuthorizerTest.kt │ │ └── util │ │ ├── Iso8601TimestampTest.kt │ │ └── WebSocketConnectionInterceptorTest.kt └── version.properties ├── appsync ├── CHANGELOG.md ├── README.md ├── aws-sdk-appsync-amplify │ ├── .gitignore │ ├── api │ │ └── aws-sdk-appsync-amplify.api │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── amazonaws │ │ │ └── sdk │ │ │ └── appsync │ │ │ └── amplify │ │ │ ├── authorizers │ │ │ ├── AmplifyIamAuthorizer.kt │ │ │ └── AmplifyUserPoolAuthorizer.kt │ │ │ └── util │ │ │ └── AppSyncRequestSigner.kt │ │ └── test │ │ └── java │ │ └── com │ │ └── amazonaws │ │ └── sdk │ │ └── appsync │ │ └── amplify │ │ ├── authorizers │ │ ├── AmplifyIamAuthorizerTest.kt │ │ └── AmplifyUserPoolAuthorizerTest.kt │ │ └── util │ │ └── AppSyncRequestSignerTest.kt ├── aws-sdk-appsync-core │ ├── .gitignore │ ├── api │ │ └── aws-sdk-appsync-core.api │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── amazonaws │ │ │ └── sdk │ │ │ └── appsync │ │ │ └── core │ │ │ ├── AppSyncAuthorizer.kt │ │ │ ├── AppSyncRequest.kt │ │ │ ├── Logger.kt │ │ │ ├── authorizers │ │ │ ├── ApiKeyAuthorizer.kt │ │ │ ├── AuthTokenAuthorizer.kt │ │ │ └── IamAuthorizer.kt │ │ │ └── util │ │ │ └── Iso8601Timestamp.kt │ │ └── test │ │ └── java │ │ └── com │ │ └── amazonaws │ │ └── sdk │ │ └── appsync │ │ └── core │ │ ├── AppSyncRequestTest.kt │ │ ├── LoggerTest.kt │ │ ├── authorizers │ │ ├── ApiKeyAuthorizerTest.kt │ │ ├── AuthTokenAuthorizerTest.kt │ │ └── IamAuthorizerTest.kt │ │ └── util │ │ └── Iso8601TimestampTest.kt ├── aws-sdk-appsync-events │ ├── .gitignore │ ├── api │ │ └── aws-sdk-appsync-events.api │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── androidTest │ │ ├── AndroidManifest.xml │ │ ├── backend │ │ │ ├── README.md │ │ │ ├── amplify.yml │ │ │ ├── amplify │ │ │ │ ├── auth │ │ │ │ │ └── resource.ts │ │ │ │ ├── backend.ts │ │ │ │ ├── package.json │ │ │ │ └── tsconfig.json │ │ │ ├── package-lock.json │ │ │ └── package.json │ │ └── java │ │ │ └── com │ │ │ └── amazonaws │ │ │ └── sdk │ │ │ └── appsync │ │ │ └── events │ │ │ ├── EventsRestClientAmplifyIamTests.kt │ │ │ ├── EventsRestClientAmplifyUserPoolTests.kt │ │ │ ├── EventsRestClientApiKeyTests.kt │ │ │ ├── EventsRestClientTests.kt │ │ │ ├── EventsWebSocketClientAmplifyIamTests.kt │ │ │ ├── EventsWebSocketClientAmplifyUserPoolTests.kt │ │ │ ├── EventsWebSocketClientTests.kt │ │ │ ├── testmodels │ │ │ ├── TestMessage.kt │ │ │ └── TestUser.kt │ │ │ └── utils │ │ │ ├── Credentials.kt │ │ │ ├── EventsConfig.kt │ │ │ └── EventsLibraryLogCapture.kt │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── amazonaws │ │ │ └── sdk │ │ │ └── appsync │ │ │ └── events │ │ │ ├── Events.kt │ │ │ ├── EventsEndpoints.kt │ │ │ ├── EventsRestClient.kt │ │ │ ├── EventsWebSocket.kt │ │ │ ├── EventsWebSocketClient.kt │ │ │ ├── EventsWebSocketProvider.kt │ │ │ ├── OkHttpConfigurationProvider.kt │ │ │ ├── WebSocketDisconnectReason.kt │ │ │ ├── data │ │ │ ├── EventsError.kt │ │ │ ├── EventsException.kt │ │ │ ├── EventsMessage.kt │ │ │ ├── PublishResult.kt │ │ │ └── WebSocketMessage.kt │ │ │ └── utils │ │ │ ├── ConnectionTimeoutTimer.kt │ │ │ ├── Headers.kt │ │ │ └── JsonUtils.kt │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── sdk │ │ │ └── appsync │ │ │ └── events │ │ │ ├── EventsEndpointsTest.kt │ │ │ ├── EventsRestClientTest.kt │ │ │ ├── EventsTest.kt │ │ │ ├── EventsWebSocketClientTest.kt │ │ │ ├── EventsWebSocketProviderTest.kt │ │ │ ├── EventsWebSocketTest.kt │ │ │ ├── WebSocketDisconnectReasonTest.kt │ │ │ ├── data │ │ │ ├── EventsErrorTest.kt │ │ │ ├── EventsExceptionTest.kt │ │ │ ├── PublishResultTest.kt │ │ │ └── WebSocketMessageTest.kt │ │ │ ├── mocks │ │ │ ├── ConvertToMockRequestInterceptor.kt │ │ │ ├── EventsLibraryLogCapture.kt │ │ │ └── TestAuthorizer.kt │ │ │ └── utils │ │ │ └── ConnectionTimeoutTimerTest.kt │ │ └── resources │ │ ├── publish_errors.json │ │ ├── publish_multi_failure.json │ │ ├── publish_multi_partial_success.json │ │ └── publish_single_success.json └── version.properties ├── aws-analytics-pinpoint ├── .gitignore ├── api │ └── aws-analytics-pinpoint.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── analytics │ │ └── pinpoint │ │ ├── PinpointAnalyticsCanaryTest.kt │ │ ├── PinpointAnalyticsInstrumentationTest.kt │ │ └── PinpointAnalyticsStressTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── analytics │ │ │ └── pinpoint │ │ │ ├── AWSPinpointAnalyticsPlugin.kt │ │ │ ├── AWSPinpointAnalyticsPluginBehavior.kt │ │ │ ├── AWSPinpointAnalyticsPluginConfiguration.java │ │ │ ├── AnalyticsChannelEventName.kt │ │ │ ├── PinpointManager.kt │ │ │ └── models │ │ │ └── AWSPinpointUserProfile.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── analytics │ │ └── pinpoint │ │ ├── AWSPinpointAnalyticsPluginBehaviorTest.kt │ │ ├── AWSPinpointAnalyticsPluginConfigurationTest.kt │ │ └── OptionsTest.kt │ └── resources │ └── robolectric.properties ├── aws-api-appsync ├── .gitignore ├── api │ └── aws-api-appsync.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ ├── api │ │ ├── aws │ │ │ ├── ApiGraphQLRequestOptions.java │ │ │ ├── AppSyncGraphQLRequest.java │ │ │ ├── AuthModeStrategy.java │ │ │ ├── AuthModeStrategyType.java │ │ │ ├── AuthorizationType.java │ │ │ ├── GraphQLRequestHelper.java │ │ │ ├── GraphQLRequestOptions.java │ │ │ ├── GsonVariablesSerializer.java │ │ │ ├── LeafSerializationBehavior.java │ │ │ ├── MultiAuthModeStrategy.java │ │ │ ├── SelectionSet.java │ │ │ └── SelectionSetExtensions.kt │ │ └── graphql │ │ │ ├── GsonResponseAdapters.java │ │ │ ├── MutationType.java │ │ │ ├── QueryType.java │ │ │ └── SubscriptionType.java │ │ ├── core │ │ └── model │ │ │ ├── auth │ │ │ ├── AuthorizationTypeIterator.java │ │ │ └── MultiAuthorizationTypeIterator.java │ │ │ ├── query │ │ │ └── predicate │ │ │ │ └── GsonPredicateAdapters.java │ │ │ ├── temporal │ │ │ ├── GsonTemporalAdapters.java │ │ │ └── Temporal.java │ │ │ └── types │ │ │ ├── GsonJavaTypeAdapters.java │ │ │ └── JavaFieldType.java │ │ ├── datastore │ │ └── appsync │ │ │ ├── AppSyncExtensions.java │ │ │ ├── ModelMetadata.java │ │ │ ├── ModelWithMetadata.java │ │ │ ├── ModelWithMetadataAdapter.java │ │ │ ├── SerializedCustomTypeAdapter.java │ │ │ └── SerializedModelAdapter.java │ │ └── util │ │ ├── GsonFactory.java │ │ ├── GsonObjectConverter.java │ │ └── TypeMaker.java │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ ├── api │ │ └── aws │ │ │ ├── ApiGraphQLRequestOptionsTest.kt │ │ │ ├── AppSyncGraphQlRequestTest.java │ │ │ ├── DefaultGraphQLRequestOptions.java │ │ │ ├── GsonObjectConverterTest.java │ │ │ ├── JustIDGraphQLRequestOptions.java │ │ │ ├── SelectionSetTest.java │ │ │ └── auth │ │ │ └── MultiAuthorizationTypeIteratorTest.java │ │ ├── core │ │ └── model │ │ │ ├── temporal │ │ │ ├── TemporalDateTest.java │ │ │ ├── TemporalDateTimeTest.java │ │ │ ├── TemporalTimeTest.java │ │ │ └── TemporalTimestampTest.java │ │ │ └── types │ │ │ └── GsonJavaTypeAdaptersTest.java │ │ └── datastore │ │ └── appsync │ │ ├── ModelWithMetadataAdapterTest.java │ │ ├── SerializedCustomTypeAdapterTest.java │ │ └── SerializedModelAdapterTest.java │ └── resources │ ├── blog-owner-with-metadata.json │ ├── gson-util.json │ ├── nested-serialized-custom-type-se-deserialization-null-field.json │ ├── nested-serialized-custom-type-se-deserialization.json │ ├── robolectric.properties │ ├── selection-set-lazy-empty-includes.txt │ ├── selection-set-lazy-with-includes.txt │ ├── selection-set-nested-serialized-model-serialized-custom-type.txt │ ├── selection-set-ownerauth.txt │ ├── selection-set-parent.txt │ ├── selection-set-post-nested.txt │ ├── selection-set-post.txt │ ├── serde-for-blog-in-serialized-model.json │ ├── serde-for-comment-in-serialized-model.json │ ├── serde-for-meeting-in-serialized-model.json │ ├── serialized-custom-type-se-deserialization.json │ ├── serialized-model-with-metadata.json │ └── serialized-model-with-nested-custom-type-se-deserialization.json ├── aws-api ├── .gitignore ├── api │ └── aws-api.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ ├── assets │ │ ├── create-comment.graphql │ │ ├── create-event.graphql │ │ ├── list-events.graphql │ │ └── subscribe-event-comments.graphql │ └── java │ │ └── com │ │ └── amplifyframework │ │ ├── api │ │ └── aws │ │ │ ├── CodeGenerationInstrumentationTest.java │ │ │ ├── GraphQLInstrumentationTest.java │ │ │ ├── GraphQLLazyCreateInstrumentationTest.kt │ │ │ ├── GraphQLLazyDeleteInstrumentationTest.kt │ │ │ ├── GraphQLLazyQueryInstrumentationTest.kt │ │ │ ├── GraphQLLazySubscribeInstrumentationTest.kt │ │ │ ├── GraphQLLazyUpdateInstrumentationTest.kt │ │ │ ├── RestApiInstrumentationTest.java │ │ │ ├── SubscriptionEndpointTest.java │ │ │ ├── TestApiCategory.java │ │ │ └── extensions │ │ │ └── LazyModelList.kt │ │ └── datastore │ │ └── generated │ │ └── model │ │ ├── AmplifyModelProvider.java │ │ ├── Blog.java │ │ ├── BlogPath.java │ │ ├── Comment.java │ │ ├── CommentPath.java │ │ ├── HasManyChild.java │ │ ├── HasManyChildPath.java │ │ ├── HasOneChild.java │ │ ├── HasOneChildPath.java │ │ ├── Parent.java │ │ ├── ParentPath.java │ │ ├── Post.java │ │ ├── PostPath.java │ │ ├── Project.java │ │ ├── ProjectPath.java │ │ ├── Team.java │ │ ├── TeamPath.java │ │ └── schema.graphql │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── api │ │ │ ├── aws │ │ │ ├── AWSApiPlugin.java │ │ │ ├── AWSApiPluginConfiguration.java │ │ │ ├── AWSApiPluginConfigurationReader.java │ │ │ ├── AWSApiSchemaRegistry.kt │ │ │ ├── AWSGraphQLOperation.kt │ │ │ ├── ApiAuthProviders.java │ │ │ ├── ApiConfiguration.java │ │ │ ├── ApiLazyModelReference.kt │ │ │ ├── ApiModelListTypes.kt │ │ │ ├── ApiQuery.kt │ │ │ ├── AppSyncGraphQLOperation.java │ │ │ ├── AppSyncGraphQLRequestFactory.kt │ │ │ ├── DomainType.java │ │ │ ├── EndpointType.java │ │ │ ├── GraphQLRequestVariable.kt │ │ │ ├── GsonFactory.java │ │ │ ├── GsonGraphQLResponseFactory.java │ │ │ ├── InterceptorFactory.java │ │ │ ├── Iso8601Timestamp.java │ │ │ ├── LazyTypeDeserializers.kt │ │ │ ├── ModelPostProcessingTypeAdapter.kt │ │ │ ├── ModelProviderLocator.java │ │ │ ├── MultiAuthAppSyncGraphQLOperation.java │ │ │ ├── MultiAuthSubscriptionOperation.java │ │ │ ├── OkHttpConfigurator.java │ │ │ ├── SubscriptionAuthorizer.java │ │ │ ├── SubscriptionEndpoint.java │ │ │ ├── SubscriptionMessageType.java │ │ │ ├── SubscriptionOperation.java │ │ │ ├── TimeoutWatchdog.java │ │ │ ├── UserAgentInterceptor.java │ │ │ ├── auth │ │ │ │ ├── ApiKeyRequestDecorator.java │ │ │ │ ├── ApiRequestDecoratorFactory.java │ │ │ │ ├── AuthRuleRequestDecorator.java │ │ │ │ ├── CognitoJWTParser.kt │ │ │ │ ├── IamRequestDecorator.java │ │ │ │ ├── RequestDecorator.java │ │ │ │ └── TokenRequestDecorator.java │ │ │ ├── operation │ │ │ │ └── AWSRestOperation.java │ │ │ ├── sigv4 │ │ │ │ ├── AWS4Signer.kt │ │ │ │ ├── ApiKeyAuthProvider.java │ │ │ │ ├── AuthProvider.java │ │ │ │ ├── CognitoUserPoolsAuthProvider.java │ │ │ │ ├── DefaultCognitoUserPoolsAuthProvider.java │ │ │ │ ├── FunctionAuthProvider.java │ │ │ │ └── OidcAuthProvider.java │ │ │ └── utils │ │ │ │ ├── JSONObjectExtensions.kt │ │ │ │ └── RestRequestFactory.java │ │ │ └── graphql │ │ │ └── model │ │ │ ├── ModelMutation.kt │ │ │ ├── ModelPagination.java │ │ │ ├── ModelQuery.kt │ │ │ └── ModelSubscription.kt │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ ├── api │ │ └── aws │ │ │ ├── AWSApiPluginConfigurationReaderTest.kt │ │ │ ├── AWSApiPluginTest.java │ │ │ ├── AWSApiPluginUserAgentTest.java │ │ │ ├── AWSApiSchemaRegistryTest.kt │ │ │ ├── ApiLazyModelListTest.kt │ │ │ ├── ApiLazyModelReferenceTest.kt │ │ │ ├── ApiLoadedModelListTest.kt │ │ │ ├── ApiSelectorTest.java │ │ │ ├── AppSyncGraphQLRequestAndResponseCPKTest.kt │ │ │ ├── AppSyncGraphQLRequestFactoryTest.java │ │ │ ├── DomainTypeTest.java │ │ │ ├── GsonGraphQLResponseFactoryTest.java │ │ │ ├── MultiAuthAppSyncGraphQLOperationTest.kt │ │ │ ├── MultiAuthSubscriptionOperationTest.kt │ │ │ ├── SubscriptionAuthorizerTest.java │ │ │ ├── TimeoutWatchdogTest.java │ │ │ ├── Todo.java │ │ │ ├── auth │ │ │ ├── ApiRequestDecoratorFactoryTest.kt │ │ │ ├── AuthRuleRequestDecoratorTest.java │ │ │ ├── CognitoJWTParserTest.kt │ │ │ ├── DummyCredentialsProvider.kt │ │ │ ├── FakeJWTToken.java │ │ │ └── OwnerBasedAuthTest.java │ │ │ ├── operation │ │ │ └── AWSRestOperationTest.java │ │ │ └── utils │ │ │ └── RestRequestFactoryTest.java │ │ ├── graphql │ │ └── model │ │ │ ├── ModelMutationTest.kt │ │ │ ├── ModelQueryTest.kt │ │ │ └── ModelSubscriptionTest.kt │ │ └── util │ │ ├── GsonFactoryTest.java │ │ ├── MockExecutorService.kt │ │ └── TypeMakerTest.java │ └── resources │ ├── base-sync-posts-response-items.json │ ├── base-sync-posts-response.json │ ├── blog-owners-query-results.json │ ├── cpk_create.json │ ├── cpk_create_response.json │ ├── cpk_create_with_multiple_sk.json │ ├── cpk_create_with_multiple_sk_null_parent.json │ ├── cpk_create_with_multiple_sk_null_parent_response.json │ ├── cpk_create_with_multiple_sk_response.json │ ├── cpk_create_with_parent_with_multiple_sk.json │ ├── cpk_create_with_parent_with_multiple_sk_response.json │ ├── cpk_create_with_sk.json │ ├── cpk_create_with_sk_response.json │ ├── cpk_delete.json │ ├── cpk_delete_response.json │ ├── cpk_list_query.json │ ├── cpk_list_query_response.json │ ├── cpk_query.json │ ├── cpk_query_response.json │ ├── cpk_query_with_multiple_sk.json │ ├── cpk_query_with_multiple_sk_response.json │ ├── cpk_query_with_sk.json │ ├── cpk_query_with_sk_response.json │ ├── cpk_update.json │ ├── cpk_update_remove_association.json │ ├── cpk_update_remove_association_response.json │ ├── cpk_update_response.json │ ├── create-meeting1.txt │ ├── delete-item.txt │ ├── delete-person-with-predicate.txt │ ├── error-extensions-gql-response.json │ ├── error-null-message.json │ ├── error-null-properties.json │ ├── lazy_create_no_includes.txt │ ├── lazy_create_with_includes.txt │ ├── lazy_query_no_includes.json │ ├── lazy_query_with_includes.json │ ├── list-meetings-response.json │ ├── multi-gql-zero-rest-api.config │ ├── non-json-gql-response.json │ ├── null-gql-response.json │ ├── partial-gql-response.json │ ├── query-for-person-by-id.txt │ ├── query-for-person-by-model-identifier.txt │ ├── query-person-by-predicate.txt │ ├── request-owner-auth.json │ ├── robolectric.properties │ ├── single-api.config │ ├── single-gql-single-rest-api.config │ ├── subscription-request-for-on-create.txt │ ├── update-person-with-predicate.txt │ ├── websocket-connection_ack.json │ ├── websocket-data.json │ ├── websocket-ka.json │ └── websocket-start_ack.json ├── aws-auth-cognito ├── .gitignore ├── api │ └── aws-auth-cognito.api ├── build.gradle.kts ├── consumer-rules.pro ├── gradle.properties └── src │ ├── androidTest │ ├── assets │ │ └── create-mfa-subscription.graphql │ └── java │ │ └── com │ │ └── amplifyframework │ │ ├── auth │ │ └── cognito │ │ │ ├── AWSCognitoAuthPluginEmailMFATests.kt │ │ │ ├── AWSCognitoAuthPluginInstrumentationTests.kt │ │ │ ├── AWSCognitoAuthPluginTOTPTests.kt │ │ │ ├── AWSCognitoAuthPluginUserAuthTests.kt │ │ │ ├── AWSCognitoAuthQueueTests.kt │ │ │ ├── AWSCognitoLegacyCredentialStoreInstrumentationTest.kt │ │ │ ├── AuthCanaryTest.kt │ │ │ ├── AuthCanaryTestGen2.kt │ │ │ ├── AuthStressTests.kt │ │ │ ├── CredentialStoreStateMachineInstrumentationTest.kt │ │ │ └── testutils │ │ │ ├── AuthConfigurationProvider.kt │ │ │ ├── CredentialStoreUtil.kt │ │ │ └── Credentials.kt │ │ └── datastore │ │ └── generated │ │ └── model │ │ └── MfaInfo.java │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ ├── auth │ │ └── cognito │ │ │ ├── AWSCognitoAuthChannelEventName.kt │ │ │ ├── AWSCognitoAuthPlugin.kt │ │ │ ├── AWSCognitoAuthService.kt │ │ │ ├── AWSCognitoAuthSession.kt │ │ │ ├── AuthConfiguration.kt │ │ │ ├── AuthEnvironment.kt │ │ │ ├── AuthStateMachine.kt │ │ │ ├── CognitoAuthExceptionConverter.kt │ │ │ ├── CredentialStoreClient.kt │ │ │ ├── CredentialStoreStateMachine.kt │ │ │ ├── HostedUIClient.kt │ │ │ ├── KotlinAuthFacadeInternal.kt │ │ │ ├── MFATypeUtil.kt │ │ │ ├── RealAWSCognitoAuthPlugin.kt │ │ │ ├── UserMFAPreference.kt │ │ │ ├── actions │ │ │ ├── AuthCognitoActions.kt │ │ │ ├── AuthenticationCognitoActions.kt │ │ │ ├── AuthorizationCognitoActions.kt │ │ │ ├── CredentialStoreCognitoActions.kt │ │ │ ├── DeleteUserCognitoActions.kt │ │ │ ├── DeviceSRPCognitoSignInActions.kt │ │ │ ├── FetchAuthSessionCognitoActions.kt │ │ │ ├── HostedUICognitoActions.kt │ │ │ ├── MigrateAuthCognitoActions.kt │ │ │ ├── SRPCognitoActions.kt │ │ │ ├── SetupTOTPCognitoActions.kt │ │ │ ├── SignInChallengeCognitoActions.kt │ │ │ ├── SignInCognitoActions.kt │ │ │ ├── SignInCustomCognitoActions.kt │ │ │ ├── SignOutCognitoActions.kt │ │ │ ├── SignUpCognitoActions.kt │ │ │ ├── UserAuthSignInCognitoActions.kt │ │ │ └── WebAuthnSignInCognitoActions.kt │ │ │ ├── activities │ │ │ ├── CustomTabsManagerActivity.kt │ │ │ └── HostedUIRedirectActivity.kt │ │ │ ├── asf │ │ │ ├── ApplicationDataCollector.kt │ │ │ ├── BuildDataCollector.kt │ │ │ ├── ContextDataAggregator.kt │ │ │ ├── DataCollector.kt │ │ │ ├── DeviceDataCollector.kt │ │ │ ├── SignatureGenerator.kt │ │ │ └── UserContextDataProvider.kt │ │ │ ├── data │ │ │ ├── AWSCognitoAuthCredentialStore.kt │ │ │ ├── AWSCognitoLegacyCredentialStore.kt │ │ │ ├── KeyValueRepositoryFactory.kt │ │ │ ├── LegacyKeyProvider.kt │ │ │ └── LegacyKeyValueRepository.kt │ │ │ ├── exceptions │ │ │ ├── configuration │ │ │ │ ├── InvalidOauthConfigurationException.kt │ │ │ │ └── InvalidUserPoolConfigurationException.kt │ │ │ ├── invalidstate │ │ │ │ └── SignedInException.kt │ │ │ ├── service │ │ │ │ ├── AliasExistsException.kt │ │ │ │ ├── CodeDeliveryFailureException.kt │ │ │ │ ├── CodeExpiredException.kt │ │ │ │ ├── CodeMismatchException.kt │ │ │ │ ├── CodeValidationException.kt │ │ │ │ ├── EnableSoftwareTokenMFAException.kt │ │ │ │ ├── FailedAttemptsLimitExceededException.kt │ │ │ │ ├── GlobalSignOutException.kt │ │ │ │ ├── HostedUISignOutException.kt │ │ │ │ ├── InvalidAccountTypeException.kt │ │ │ │ ├── InvalidGrantException.kt │ │ │ │ ├── InvalidParameterException.kt │ │ │ │ ├── InvalidPasswordException.kt │ │ │ │ ├── LimitExceededException.kt │ │ │ │ ├── MFAMethodNotFoundException.kt │ │ │ │ ├── ParseTokenException.kt │ │ │ │ ├── PasswordResetRequiredException.kt │ │ │ │ ├── ResourceNotFoundException.kt │ │ │ │ ├── RevokeTokenException.kt │ │ │ │ ├── SoftwareTokenMFANotFoundException.kt │ │ │ │ ├── TooManyRequestsException.kt │ │ │ │ ├── UserCancelledException.kt │ │ │ │ ├── UserLambdaValidationException.kt │ │ │ │ ├── UserNotConfirmedException.kt │ │ │ │ ├── UserNotFoundException.kt │ │ │ │ ├── UsernameExistsException.kt │ │ │ │ └── WebAuthnNotEnabledException.kt │ │ │ └── webauthn │ │ │ │ ├── WebAuthnCredentialAlreadyExistsException.kt │ │ │ │ ├── WebAuthnFailedException.kt │ │ │ │ ├── WebAuthnNotSupportedException.kt │ │ │ │ └── WebAuthnRpMismatchException.kt │ │ │ ├── helpers │ │ │ ├── AuthFactorTypeHelper.kt │ │ │ ├── AuthFlowTypeHelper.kt │ │ │ ├── AuthHelper.kt │ │ │ ├── AuthLogger.kt │ │ │ ├── BrowserHelper.kt │ │ │ ├── CodegenExtensions.kt │ │ │ ├── CognitoDeviceHelper.kt │ │ │ ├── FlowExtensions.kt │ │ │ ├── FlutterFactory.kt │ │ │ ├── HostedUIHelper.kt │ │ │ ├── HostedUIHttpHelper.kt │ │ │ ├── JWTParser.kt │ │ │ ├── MFAHelper.kt │ │ │ ├── PkceHelper.kt │ │ │ ├── SRPHelper.kt │ │ │ ├── SessionHelper.kt │ │ │ ├── SignInChallengeHelper.kt │ │ │ └── WebAuthnHelper.kt │ │ │ ├── options │ │ │ ├── AWSCognitoAuthConfirmResetPasswordOptions.kt │ │ │ ├── AWSCognitoAuthConfirmSignInOptions.kt │ │ │ ├── AWSCognitoAuthConfirmSignUpOptions.kt │ │ │ ├── AWSCognitoAuthListWebAuthnCredentialsOptions.kt │ │ │ ├── AWSCognitoAuthResendSignUpCodeOptions.kt │ │ │ ├── AWSCognitoAuthResendUserAttributeConfirmationCodeOptions.kt │ │ │ ├── AWSCognitoAuthResetPasswordOptions.kt │ │ │ ├── AWSCognitoAuthSignInOptions.java │ │ │ ├── AWSCognitoAuthSignOutOptions.java │ │ │ ├── AWSCognitoAuthSignUpOptions.kt │ │ │ ├── AWSCognitoAuthUpdateUserAttributeOptions.kt │ │ │ ├── AWSCognitoAuthUpdateUserAttributesOptions.kt │ │ │ ├── AWSCognitoAuthVerifyTOTPSetupOptions.kt │ │ │ ├── AWSCognitoAuthWebUISignInOptions.java │ │ │ ├── AuthFlowType.java │ │ │ └── FederateToIdentityPoolOptions.kt │ │ │ ├── result │ │ │ ├── AWSCognitoAuthListWebAuthnCredentialsResult.kt │ │ │ ├── AWSCognitoAuthSignOutResult.kt │ │ │ └── FederateToIdentityPoolResult.kt │ │ │ ├── usecases │ │ │ ├── AssociateWebAuthnCredentialUseCase.kt │ │ │ ├── AuthUseCaseFactory.kt │ │ │ ├── AutoSignInUseCase.kt │ │ │ ├── ConfirmResetPasswordUseCase.kt │ │ │ ├── ConfirmSignUpUseCase.kt │ │ │ ├── ConfirmUserAttributeUseCase.kt │ │ │ ├── DeleteUserUseCase.kt │ │ │ ├── DeleteWebAuthnCredentialUseCase.kt │ │ │ ├── FetchAuthSessionUseCase.kt │ │ │ ├── FetchDevicesUseCase.kt │ │ │ ├── FetchMfaPreferenceUseCase.kt │ │ │ ├── FetchUserAttributesUseCase.kt │ │ │ ├── ForgetDeviceUseCase.kt │ │ │ ├── GetCurrentUserUseCase.kt │ │ │ ├── ListWebAuthnCredentialsUseCase.kt │ │ │ ├── RememberDeviceUseCase.kt │ │ │ ├── ResendSignupCodeUseCase.kt │ │ │ ├── ResendUserAttributeConfirmationUseCase.kt │ │ │ ├── ResetPasswordUseCase.kt │ │ │ ├── SetupTotpUseCase.kt │ │ │ ├── SignUpUseCase.kt │ │ │ ├── UpdateMfaPreferenceUseCase.kt │ │ │ ├── UpdatePasswordUseCase.kt │ │ │ ├── UpdateUserAttributesUseCase.kt │ │ │ └── VerifyTotpSetupUseCase.kt │ │ │ └── util │ │ │ └── CognitoExtensions.kt │ │ └── statemachine │ │ ├── Action.kt │ │ ├── Builder.kt │ │ ├── ConcurrentEffectExecutor.kt │ │ ├── EffectExecutor.kt │ │ ├── Environment.kt │ │ ├── EventDispatcher.kt │ │ ├── LoggingStateMachineResolver.kt │ │ ├── State.kt │ │ ├── StateMachine.kt │ │ ├── StateMachineEvent.kt │ │ ├── StateMachineResolver.kt │ │ ├── StateResolution.kt │ │ ├── codegen │ │ ├── actions │ │ │ ├── AuthActions.kt │ │ │ ├── AuthenticationActions.kt │ │ │ ├── AuthorizationActions.kt │ │ │ ├── CredentialStoreActions.kt │ │ │ ├── CustomSignInActions.kt │ │ │ ├── DeleteUserActions.kt │ │ │ ├── DeviceSRPSignInActions.kt │ │ │ ├── FetchAuthSessionActions.kt │ │ │ ├── HostedUIActions.kt │ │ │ ├── MigrateAuthActions.kt │ │ │ ├── SRPActions.kt │ │ │ ├── SetupTOTPActions.kt │ │ │ ├── SignInActions.kt │ │ │ ├── SignInChallengeActions.kt │ │ │ ├── SignOutActions.kt │ │ │ ├── SignUpActions.kt │ │ │ ├── UserAuthSignInActions.kt │ │ │ └── WebAuthnSignInActions.kt │ │ ├── data │ │ │ ├── AmplifyCredential.kt │ │ │ ├── AuthChallenge.kt │ │ │ ├── AuthCredentialStore.kt │ │ │ ├── ChallengeParameter.kt │ │ │ ├── DeviceMetadata.kt │ │ │ ├── GlobalSignOutErrorData.kt │ │ │ ├── HostedUIErrorData.kt │ │ │ ├── HostedUIOptions.kt │ │ │ ├── HostedUIProviderInfo.kt │ │ │ ├── IdentityPoolConfiguration.kt │ │ │ ├── LoginsMapProvider.kt │ │ │ ├── OauthConfiguration.kt │ │ │ ├── RevokeTokenErrorData.kt │ │ │ ├── SignInData.kt │ │ │ ├── SignInMethod.kt │ │ │ ├── SignInTOTPSetupData.kt │ │ │ ├── SignOutData.kt │ │ │ ├── SignUpData.kt │ │ │ ├── SignedInData.kt │ │ │ ├── SignedOutData.kt │ │ │ ├── UserPoolConfiguration.kt │ │ │ ├── WebAuthnSignInContext.kt │ │ │ └── serializer │ │ │ │ └── DateSerializer.kt │ │ ├── errors │ │ │ ├── CredentialStoreError.kt │ │ │ └── SessionError.kt │ │ ├── events │ │ │ ├── AuthEvent.kt │ │ │ ├── AuthenticationEvent.kt │ │ │ ├── AuthorizationEvent.kt │ │ │ ├── CredentialStoreEvent.kt │ │ │ ├── CustomSignInEvent.kt │ │ │ ├── DeleteUserEvent.kt │ │ │ ├── DeviceSRPSignInEvent.kt │ │ │ ├── FetchAuthSessionEvent.kt │ │ │ ├── HostedUIEvent.kt │ │ │ ├── RefreshSessionEvent.kt │ │ │ ├── SRPEvent.kt │ │ │ ├── SetupTOTPEvent.kt │ │ │ ├── SignInChallengeEvent.kt │ │ │ ├── SignInEvent.kt │ │ │ ├── SignOutEvent.kt │ │ │ ├── SignUpEvent.kt │ │ │ └── WebAuthnEvent.kt │ │ └── states │ │ │ ├── AuthState.kt │ │ │ ├── AuthenticationState.kt │ │ │ ├── AuthorizationState.kt │ │ │ ├── CredentialStoreState.kt │ │ │ ├── CustomSignInState.kt │ │ │ ├── DeleteUserState.kt │ │ │ ├── DeviceSRPSignInState.kt │ │ │ ├── FetchAuthSessionState.kt │ │ │ ├── HostedUISignInState.kt │ │ │ ├── MigrateSignInState.kt │ │ │ ├── RefreshSessionState.kt │ │ │ ├── SRPSignInState.kt │ │ │ ├── SetupTOTPState.kt │ │ │ ├── SignInChallengeState.kt │ │ │ ├── SignInState.kt │ │ │ ├── SignOutState.kt │ │ │ ├── SignUpState.kt │ │ │ └── WebAuthnSignInState.kt │ │ └── util │ │ └── MaskUtil.kt │ └── test │ ├── java │ ├── android │ │ └── util │ │ │ └── Base64.kt │ ├── com │ │ └── amplifyframework │ │ │ ├── auth │ │ │ ├── AWSCredentialsFactoryTest.kt │ │ │ ├── TOTPSetupDetailsTest.kt │ │ │ └── cognito │ │ │ │ ├── AWSCognitoAuthPluginFeatureTest.kt │ │ │ │ ├── AWSCognitoAuthPluginTest.kt │ │ │ │ ├── AWSCognitoAuthServiceTest.kt │ │ │ │ ├── AuthConfigurationTest.kt │ │ │ │ ├── AuthValidationTest.kt │ │ │ │ ├── CredentialStoreClientTest.kt │ │ │ │ ├── CustomMatchers.kt │ │ │ │ ├── MFATypeUtilTest.kt │ │ │ │ ├── MockAuthHelperRule.kt │ │ │ │ ├── MockData.kt │ │ │ │ ├── RealAWSCognitoAuthPluginTest.kt │ │ │ │ ├── actions │ │ │ │ ├── AutoSignInCognitoActionsTest.kt │ │ │ │ ├── MigrateAuthCognitoActionsTest.kt │ │ │ │ ├── SRPCognitoActionsTest.kt │ │ │ │ ├── SetupTOTPCognitoActionsTest.kt │ │ │ │ ├── SignInChallengeCognitoActionsTest.kt │ │ │ │ ├── SignUpCognitoActionsTest.kt │ │ │ │ ├── UserAuthSignInCognitoActionsTest.kt │ │ │ │ └── WebAuthnSignInCognitoActionsTest.kt │ │ │ │ ├── asf │ │ │ │ └── DeviceDataCollectorTest.kt │ │ │ │ ├── data │ │ │ │ ├── AWSCognitoAuthCredentialStoreTest.kt │ │ │ │ ├── AWSCognitoLegacyCredentialStoreTest.kt │ │ │ │ └── LegacyKeyProviderTest.kt │ │ │ │ ├── featuretest │ │ │ │ ├── AuthAPI.kt │ │ │ │ ├── FeatureTestCase.kt │ │ │ │ ├── generators │ │ │ │ │ ├── JsonGenerator.kt │ │ │ │ │ ├── SerializationTools.kt │ │ │ │ │ ├── authstategenerators │ │ │ │ │ │ └── AuthStateJsonGenerator.kt │ │ │ │ │ └── testcasegenerators │ │ │ │ │ │ ├── ConfirmSignInTestCaseGenerator.kt │ │ │ │ │ │ ├── ConfirmSignUpTestCaseGenerator.kt │ │ │ │ │ │ ├── DeleteUserTestCaseGenerator.kt │ │ │ │ │ │ ├── FetchAuthSessionTestCaseGenerator.kt │ │ │ │ │ │ ├── FetchDevicesTestCaseGenerator.kt │ │ │ │ │ │ ├── FetchUserAttributesTestCaseGenerator.kt │ │ │ │ │ │ ├── ForgetDeviceTestCaseGenerator.kt │ │ │ │ │ │ ├── GetCurrentUserTestCaseGenerator.kt │ │ │ │ │ │ ├── RememberDeviceTestCaseGenerator.kt │ │ │ │ │ │ ├── ResetPasswordTestCaseGenerator.kt │ │ │ │ │ │ ├── SignInTestCaseGenerator.kt │ │ │ │ │ │ ├── SignOutTestCaseGenerator.kt │ │ │ │ │ │ └── SignUpTestCaseGenerator.kt │ │ │ │ └── serializers │ │ │ │ │ ├── AuthSignUpResultSerializer.kt │ │ │ │ │ ├── AuthStatesSerializer.kt │ │ │ │ │ └── CognitoExceptionSerializers.kt │ │ │ │ ├── helpers │ │ │ │ ├── CognitoDeviceHelperTests.kt │ │ │ │ ├── JWTParserTests.kt │ │ │ │ ├── SRPHelperTests.kt │ │ │ │ ├── SessionHelperTests.kt │ │ │ │ ├── SignInChallengeHelperTest.kt │ │ │ │ └── WebAuthnHelperTest.kt │ │ │ │ ├── options │ │ │ │ ├── APIOptionsContractTest.java │ │ │ │ └── APIOptionsKotlinContractTest.kt │ │ │ │ ├── testUtil │ │ │ │ ├── EventMatchers.kt │ │ │ │ └── MockData.kt │ │ │ │ └── usecases │ │ │ │ ├── AssociateWebAuthnCredentialUseCaseTest.kt │ │ │ │ ├── AutoSignInUseCaseTest.kt │ │ │ │ ├── CodeDeliveryDetailsTypeExtensionTest.kt │ │ │ │ ├── ConfirmResetPasswordUseCaseTest.kt │ │ │ │ ├── ConfirmSignUpUseCaseTest.kt │ │ │ │ ├── ConfirmUserAttributeUseCaseTest.kt │ │ │ │ ├── DeleteUserUseCaseTest.kt │ │ │ │ ├── DeleteWebAuthnCredentialsUseCaseTest.kt │ │ │ │ ├── FetchDevicesUseCaseTest.kt │ │ │ │ ├── FetchMfaPreferenceUseCaseTest.kt │ │ │ │ ├── FetchUserAttributesUseCaseTest.kt │ │ │ │ ├── ForgetDeviceUseCaseTest.kt │ │ │ │ ├── GetCurrentUserUseCaseTest.kt │ │ │ │ ├── ListWebAuthnCredentialsUseCaseTest.kt │ │ │ │ ├── RememberDeviceUseCaseTest.kt │ │ │ │ ├── ResendSignupCodeUseCaseTest.kt │ │ │ │ ├── ResendUserAttributeConfirmationUseCaseTest.kt │ │ │ │ ├── ResetPasswordUseCaseTest.kt │ │ │ │ ├── SetupTotpUseCaseTest.kt │ │ │ │ ├── SignUpUseCaseTest.kt │ │ │ │ ├── UpdateMfaPreferenceUseCaseTest.kt │ │ │ │ ├── UpdatePasswordUseCaseTest.kt │ │ │ │ ├── UpdateUserAttributesUseCaseTest.kt │ │ │ │ └── VerifyTotpSetupUseCaseTest.kt │ │ │ └── statemachine │ │ │ ├── StateMachineListenerTests.kt │ │ │ ├── StateMachineTests.kt │ │ │ ├── state │ │ │ ├── Color.kt │ │ │ ├── ColorCounter.kt │ │ │ └── Counter.kt │ │ │ └── util │ │ │ └── MaskUtilTest.kt │ └── featureTest │ │ └── utilities │ │ ├── APICaptorFactory.kt │ │ ├── APIExecutor.kt │ │ ├── AuthOptionsFactory.kt │ │ ├── CognitoMockFactory.kt │ │ ├── CognitoRequestFactory.kt │ │ └── TimeZoneRule.kt │ └── resources │ ├── feature-test │ ├── configuration │ │ ├── authconfiguration.json │ │ ├── authconfiguration_oauth.json │ │ └── authconfiguration_userauth.json │ ├── states │ │ ├── CustomSignIn_SigningIn.json │ │ ├── CustomSignIn_SigningIn_Password_Challenge.json │ │ ├── CustomSignIn_SigningIn_With_Alias.json │ │ ├── SignedIn_SessionEstablished.json │ │ ├── SignedIn_SessionEstablished_User_Auth.json │ │ ├── SignedIn_UserPoolSessionEstablished.json │ │ ├── SignedOut_Configured.json │ │ ├── SignedOut_Configured_AwaitingUserConfirmation.json │ │ ├── SignedOut_IdentityPoolConfigured.json │ │ ├── SignedOut_SessionEstablished_AwaitingUserConfirmation.json │ │ ├── SignedOut_SessionEstablished_SignedUp.json │ │ ├── SigningIn_CustomChallenge.json │ │ ├── SigningIn_EmailOtp.json │ │ ├── SigningIn_SelectChallenge.json │ │ ├── SigningIn_SigningIn.json │ │ ├── SigningIn_SigningIn_Custom.json │ │ └── SigningIn_SmsOtp.json │ └── testsuites │ │ ├── autoSignIn │ │ ├── Test_that_autoSignIn_invokes_proper_cognito_request_and_returns_DONE.json │ │ └── Test_that_autoSignIn_without_ConfirmSignUp_fails.json │ │ ├── confirmSignIn │ │ ├── Test_that_SignIn_with_SMS_challenge_invokes_proper_cognito_request_and_returns_success.json │ │ ├── Test_that_confirmsignin_secondary_challenge_processes_the_custom_challenge_returned.json │ │ ├── Test_that_entering_the_correct_SMS_OTP_code_signs_the_user_in.json │ │ ├── Test_that_entering_the_correct_email_OTP_code_signs_the_user_in.json │ │ ├── Test_that_entering_the_incorrect_SMS_OTP_code_fails.json │ │ ├── Test_that_entering_the_incorrect_email_OTP_code_fails.json │ │ ├── Test_that_invalid_code_on_confirm_SignIn_with_SMS_challenge_errors_out.json │ │ ├── Test_that_selecting_the_PASSWORD_SRP_challenge_with_the_correct_password_succeeds.json │ │ ├── Test_that_selecting_the_PASSWORD_SRP_challenge_with_the_incorrect_password_fails.json │ │ ├── Test_that_selecting_the_PASSWORD_challenge_with_the_correct_password_succeeds.json │ │ ├── Test_that_selecting_the_PASSWORD_challenge_with_the_incorrect_password_fails.json │ │ ├── Test_that_selecting_the_SMS_OTP_challenge_returns_the_proper_state.json │ │ └── Test_that_selecting_the_email_OTP_challenge_returns_the_proper_state.json │ │ ├── confirmSignUp │ │ ├── Test_that_non_passwordless_confirmSignUp_returns_Done.json │ │ ├── Test_that_passwordless_confirmSignUp_returns_CompleteAutoSignIn.json │ │ ├── Test_that_passwordless_confirmSignUp_with_Invalid_Confirmation_Code_returns_Exception.json │ │ ├── Test_that_passwordless_confirmSignUp_with_Invalid_Username_returns_Exception.json │ │ └── Test_that_passwordless_confirmSignUp_with_Unregistered_User_returns_Exception.json │ │ ├── deleteUser │ │ ├── AuthException_is_thrown_when_deleteUser_API_call_fails.json │ │ ├── Nothing_is_returned_when_delete_user_succeeds.json │ │ └── Test_that_Cognito_is_called_with_given_payload_and_returns_successful_data.json │ │ ├── fetchAuthSession │ │ ├── AuthSession_object_is_successfully_returned_after_failed_identity_refresh.json │ │ ├── AuthSession_object_is_successfully_returned_after_failed_refresh.json │ │ ├── AuthSession_object_is_successfully_returned_after_refresh.json │ │ ├── AuthSession_object_is_successfully_returned_for_Identity_Pool.json │ │ ├── AuthSession_object_is_successfully_returned_for_UserAndIdentity_Pool.json │ │ └── AuthSession_object_is_successfully_returned_for_User_Pool.json │ │ ├── fetchDevices │ │ ├── AuthException_is_thrown_when_forgetDevice_API_is_called_without_signing_in.json │ │ ├── List_of_devices_returned_when_fetch_devices_API_succeeds.json │ │ └── Test_that_Cognito_is_called_with_given_payload_and_returns_successful_data.json │ │ ├── fetchUserAttributes │ │ ├── AuthException_is_thrown_when_fetchUserAttributes_API_is_called_without_signing_in.json │ │ ├── List_of_user_attributes_returned_when_fetch_user_attributes_API_succeeds.json │ │ └── Test_that_Cognito_is_called_with_given_payload_and_returns_successful_data.json │ │ ├── forgetDevice │ │ ├── AuthException_is_thrown_when_forgetDevice_API_is_called_without_signing_in.json │ │ ├── Nothing_is_returned_when_forget_device_succeeds.json │ │ └── Test_that_Cognito_is_called_with_given_payload_and_returns_successful_data.json │ │ ├── rememberDevice │ │ ├── AuthException_is_thrown_when_rememberDevice_API_is_called_without_signing_in.json │ │ ├── Nothing_is_returned_when_remember_device_succeeds.json │ │ └── Test_that_Cognito_is_called_with_given_payload_and_returns_successful_data.json │ │ ├── resetPassword │ │ ├── AuthException_is_thrown_when_forgotPassword_API_call_fails.json │ │ ├── AuthResetPasswordResult_object_is_returned_when_reset_password_succeeds.json │ │ └── Test_that_Cognito_is_called_with_given_payload_and_returns_successful_data.json │ │ ├── signIn │ │ ├── Test_that_Custom_Auth_signIn_invokes_ResourceNotFoundException_and_then_receive_proper_cognito_request_and_returns_custom_challenge.json │ │ ├── Test_that_Custom_Auth_signIn_invokes_ResourceNotFoundException_and_then_received_proper_cognito_request_and_returns_password_challenge.json │ │ ├── Test_that_Custom_Auth_signIn_invokes_proper_cognito_request_and_returns_custom_challenge.json │ │ ├── Test_that_Custom_Auth_signIn_invokes_proper_cognito_request_and_returns_password_challenge.json │ │ ├── Test_that_Custom_Auth_signIn_invokes_proper_cognito_request_and_returns_password_challenge_when_alias_is_used.json │ │ ├── Test_that_Device_SRP_signIn_invokes_proper_cognito_request_and_returns_success.json │ │ ├── Test_that_SRP_signIn_invokes_proper_cognito_request_and_returns_ResourceNotFoundException_but_still_signs_in_successfully.json │ │ ├── Test_that_SRP_signIn_invokes_proper_cognito_request_and_returns_SMS_challenge.json │ │ ├── Test_that_SRP_signIn_invokes_proper_cognito_request_and_returns_success.json │ │ ├── Test_that_USER_AUTH_signIn_with_EMAIL_preference_returns_Confirm_Sign_In_With_OTP.json │ │ ├── Test_that_USER_AUTH_signIn_with_PASSWORD_SRP_preference_fails.json │ │ ├── Test_that_USER_AUTH_signIn_with_PASSWORD_SRP_preference_succeeds.json │ │ ├── Test_that_USER_AUTH_signIn_with_PASSWORD_preference_fails.json │ │ ├── Test_that_USER_AUTH_signIn_with_PASSWORD_preference_succeeds.json │ │ ├── Test_that_USER_AUTH_signIn_with_SMS_preference_returns_Confirm_Sign_In_With_OTP.json │ │ ├── Test_that_USER_AUTH_signIn_with_an_unsupported_preference_returns_Select_Challenge.json │ │ ├── Test_that_USER_AUTH_signIn_with_no_preference_returns_Select_Challenge.json │ │ └── Test_that_overriding_signIn_when_already_signing_in_returns_success.json │ │ ├── signOut │ │ ├── Test_that_globalSignOut_returns_partial_success_with_revoke_token_error.json │ │ ├── Test_that_global_signOut_error_returns_partial_success_with_global_sign_out_error.json │ │ ├── Test_that_global_signOut_while_signed_in_returns_complete_with_success.json │ │ ├── Test_that_signOut_returns_partial_success_with_revoke_token_error.json │ │ ├── Test_that_signOut_while_already_signed_out_returns_complete_with_success.json │ │ └── Test_that_signOut_while_signed_in_returns_complete_with_success.json │ │ └── signUp │ │ ├── Sign_up_finishes_if_user_is_confirmed_in_the_first_step.json │ │ ├── Test_that_passwordless_confirmed_signUp_with_valid_username_returns_CompleteAutoSignIn.json │ │ ├── Test_that_passwordless_signUp_with_an_existing_username_fails.json │ │ ├── Test_that_passwordless_signUp_with_an_invalid_username_fails.json │ │ ├── Test_that_passwordless_uncofirmed_signUp_with_valid_username_returns_ConfirmSignUpStep.json │ │ └── Test_that_signup_invokes_proper_cognito_request_and_returns_success.json │ ├── mockito-extensions │ └── org.mockito.plugins.MockMaker │ └── robolectric.properties ├── aws-auth-plugins-core ├── .gitignore ├── api │ └── aws-auth-plugins-core.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── auth │ │ └── plugins │ │ └── core │ │ ├── AWSCognitoIdentityPoolDetails.kt │ │ ├── AWSCognitoIdentityPoolOperations.kt │ │ ├── AuthHubEventEmitter.kt │ │ ├── CognitoClientFactory.kt │ │ └── data │ │ ├── AWSCognitoIdentityPoolConfiguration.kt │ │ ├── AWSCredentialsInternal.kt │ │ └── AuthCredentialStore.kt │ └── test │ └── java │ └── com │ └── amplifyframework │ └── auth │ └── plugins │ └── core │ ├── AWSCognitoIdentityPoolOperationsTest.kt │ └── AuthHubEventEmitterTest.kt ├── aws-core ├── .gitignore ├── api │ └── aws-core.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ ├── auth │ │ ├── AWSAuthSessionBehavior.kt │ │ ├── AWSCognitoAuthMetadataType.kt │ │ ├── AWSCognitoUserPoolTokens.kt │ │ ├── AWSCredentials.kt │ │ ├── AWSCredentialsProvider.kt │ │ ├── AuthCredentialsProvider.kt │ │ └── CognitoCredentialsProvider.kt │ │ └── util │ │ ├── AmplifyHttp.kt │ │ └── DocumentExtensions.kt │ └── test │ └── java │ └── com │ └── amplifyframework │ └── util │ └── DocumentExtensionsTest.kt ├── aws-datastore ├── .gitignore ├── api │ └── aws-datastore.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ ├── AndroidManifest.xml │ ├── assets │ │ ├── schema-drift-mutation.graphql │ │ └── schemas │ │ │ ├── commentsblog │ │ │ ├── author.json │ │ │ ├── blog-owner.json │ │ │ ├── blog.json │ │ │ ├── comment.json │ │ │ ├── post-author-join.json │ │ │ └── post.json │ │ │ ├── meeting │ │ │ └── meeting.json │ │ │ └── phonecall │ │ │ ├── call.json │ │ │ ├── person.json │ │ │ └── phone.json │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── datastore │ │ ├── AppSyncClientInstrumentationTest.java │ │ ├── BasicCloudSyncInstrumentationTest.java │ │ ├── DataStoreCategoryConfigurator.java │ │ ├── DataStoreHubEventFilters.java │ │ ├── DatastoreCanaryTest.kt │ │ ├── DatastoreCanaryTestGen2.kt │ │ ├── HybridOfflineInstrumentationTest.java │ │ ├── MultiAuthSyncEngineInstrumentationTest.java │ │ ├── MultiAuthSyncEngineNoAuthInstrumentationTest.java │ │ ├── SchemaDriftTest.java │ │ ├── SchemaLoader.java │ │ ├── SchemaProvider.java │ │ ├── StartStopInstrumentationTest.java │ │ ├── StrictMode.java │ │ ├── SynchronousHybridBehaviors.java │ │ ├── appsync │ │ └── SynchronousAppSync.java │ │ ├── storage │ │ ├── SynchronousStorageAdapter.java │ │ └── sqlite │ │ │ ├── ModelUpgradeSQLiteInstrumentedTest.java │ │ │ ├── SQLiteStorageAdapterBatchTest.kt │ │ │ ├── SQLiteStorageAdapterClearTest.java │ │ │ ├── SQLiteStorageAdapterCustomPrimaryKeyTest.java │ │ │ ├── SQLiteStorageAdapterDeleteTest.java │ │ │ ├── SQLiteStorageAdapterDeleteWithCpkTest.java │ │ │ ├── SQLiteStorageAdapterModelConverterTest.java │ │ │ ├── SQLiteStorageAdapterObserveQueryTest.java │ │ │ ├── SQLiteStorageAdapterQueryTest.java │ │ │ ├── SQLiteStorageAdapterSaveTest.java │ │ │ ├── SQLiteStorageCustomTypeTest.java │ │ │ ├── SQLiteStorageHelperInstrumentedTest.java │ │ │ ├── SQLiteStorageReservedWordTest.java │ │ │ └── TestStorageAdapter.java │ │ └── syncengine │ │ └── MutationPersistenceInstrumentationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── datastore │ │ │ ├── AWSDataStorePlugin.java │ │ │ ├── AmplifyDisposables.java │ │ │ ├── DataStoreConfiguration.java │ │ │ ├── DataStoreConfigurationProvider.java │ │ │ ├── DataStoreConflictHandler.java │ │ │ ├── DataStoreErrorHandler.java │ │ │ ├── DataStoreSyncExpression.java │ │ │ ├── DefaultDataStoreErrorHandler.java │ │ │ ├── appsync │ │ │ ├── AWSAppSyncScalarType.java │ │ │ ├── AppSync.java │ │ │ ├── AppSyncClient.java │ │ │ ├── AppSyncConflictUnhandledError.java │ │ │ ├── AppSyncRequestFactory.java │ │ │ └── DataStoreGraphQLRequestOptions.java │ │ │ ├── extensions │ │ │ └── ModelExtensions.kt │ │ │ ├── model │ │ │ ├── CompoundModelProvider.java │ │ │ ├── ModelFieldTypeConverter.java │ │ │ ├── ModelHelper.java │ │ │ ├── ModelProviderLocator.java │ │ │ ├── SimpleModelProvider.java │ │ │ └── SystemModelsProviderFactory.java │ │ │ ├── storage │ │ │ ├── ItemChangeMapper.java │ │ │ ├── LocalStorageAdapter.java │ │ │ ├── StorageItemChange.java │ │ │ ├── StorageOperation.kt │ │ │ └── sqlite │ │ │ │ ├── CreateSqlCommands.java │ │ │ │ ├── ModelComparator.java │ │ │ │ ├── ModelSorter.java │ │ │ │ ├── ModelUpdateStrategy.java │ │ │ │ ├── ObserveQueryExecutor.java │ │ │ │ ├── PersistentModelVersion.java │ │ │ │ ├── SQLCommandFactory.java │ │ │ │ ├── SQLCommandProcessor.java │ │ │ │ ├── SQLiteCommandFactory.java │ │ │ │ ├── SQLiteDataType.java │ │ │ │ ├── SQLiteModelFieldTypeConverter.java │ │ │ │ ├── SQLiteModelTree.java │ │ │ │ ├── SQLiteStorageAdapter.java │ │ │ │ ├── SQLiteStorageHelper.java │ │ │ │ ├── SqlCommand.java │ │ │ │ ├── SqlKeyword.java │ │ │ │ ├── SqlQueryProcessor.java │ │ │ │ ├── SyncStatus.java │ │ │ │ ├── TransactionBlock.kt │ │ │ │ ├── TypeConverter.java │ │ │ │ ├── adapter │ │ │ │ ├── SQLPredicate.java │ │ │ │ ├── SQLiteColumn.java │ │ │ │ └── SQLiteTable.java │ │ │ │ └── migrations │ │ │ │ ├── AddModelNameToModelMetadataKey.java │ │ │ │ ├── AddSyncExpressionToLastSyncMetadata.java │ │ │ │ ├── ModelMigration.java │ │ │ │ └── ModelMigrations.java │ │ │ ├── syncengine │ │ │ ├── AbortableCountDownLatch.java │ │ │ ├── ConflictResolver.java │ │ │ ├── GsonPendingMutationConverter.java │ │ │ ├── LastSyncMetadata.java │ │ │ ├── Merger.kt │ │ │ ├── ModelSyncMetricsAccumulator.java │ │ │ ├── MutationOutbox.kt │ │ │ ├── MutationProcessor.java │ │ │ ├── MutationQueue.java │ │ │ ├── Orchestrator.java │ │ │ ├── OutboxMutationEvent.java │ │ │ ├── OutboxMutationFailedEvent.java │ │ │ ├── PendingMutation.java │ │ │ ├── PersistentMutationOutbox.kt │ │ │ ├── QueryPredicateProvider.java │ │ │ ├── ReachabilityMonitor.kt │ │ │ ├── RetryHandler.java │ │ │ ├── RetryStrategy.java │ │ │ ├── SchedulerProvider.kt │ │ │ ├── StorageObserver.java │ │ │ ├── SubscriptionEvent.java │ │ │ ├── SubscriptionProcessor.java │ │ │ ├── SyncProcessor.java │ │ │ ├── SyncTime.java │ │ │ ├── SyncTimeRegistry.java │ │ │ ├── SyncType.java │ │ │ ├── TimeBasedUuid.java │ │ │ ├── TimeBasedUuidTypeAdapter.java │ │ │ ├── TopologicalOrdering.java │ │ │ └── VersionRepository.kt │ │ │ └── utils │ │ │ └── ErrorInspector.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── datastore │ │ ├── ConflictResolverIntegrationTest.java │ │ ├── DataStoreConfigurationTest.java │ │ ├── DataStoreConflictHandlerTest.java │ │ ├── appsync │ │ ├── AppSyncClientTest.java │ │ ├── AppSyncConflictUnhandledErrorFactory.java │ │ ├── AppSyncConflictUnhandledErrorFactoryTest.java │ │ ├── AppSyncConflictUnhandledErrorTest.java │ │ ├── AppSyncExtensionsTest.java │ │ ├── AppSyncMocking.java │ │ ├── AppSyncMockingTest.java │ │ ├── AppSyncRequestFactoryTest.java │ │ └── TestModelWithMetadataInstances.java │ │ ├── model │ │ ├── CompoundModelProviderTest.java │ │ └── ModelProviderLocatorTest.java │ │ ├── storage │ │ ├── InMemoryStorageAdapter.java │ │ ├── ItemChangeMapperTest.java │ │ ├── PendingMutationPersistentRecordTest.java │ │ ├── SynchronousStorageAdapter.java │ │ └── sqlite │ │ │ ├── ModelComparatorTest.java │ │ │ ├── ModelSorterTest.java │ │ │ ├── ObserveQueryExecutorTest.java │ │ │ ├── SQLCommandProcessorTest.kt │ │ │ ├── SQLPredicateTest.java │ │ │ ├── SQLiteModelFieldTypeConverterTest.java │ │ │ ├── SQLiteModelTreeTest.java │ │ │ ├── SqlCommandTest.java │ │ │ ├── SyncStatusTest.java │ │ │ └── adapter │ │ │ └── SQLiteTableTest.java │ │ └── syncengine │ │ ├── ConcurrentSyncProcessorTest.kt │ │ ├── ConflictResolverTest.java │ │ ├── GsonPendingMutationConverterTest.java │ │ ├── MergerTest.kt │ │ ├── MutationProcessorTest.kt │ │ ├── MutationQueueTest.java │ │ ├── OrchestratorTest.java │ │ ├── PendingMutationTest.java │ │ ├── PersistentMutationOutboxTest.kt │ │ ├── QueryPredicateTest.java │ │ ├── ReachabilityMonitorTest.kt │ │ ├── RetryHandlerTest.java │ │ ├── RetryStrategyTest.java │ │ ├── SubscriptionProcessorTest.java │ │ ├── SyncProcessorTest.java │ │ ├── TestHubEventFilters.java │ │ ├── TestSchedulerProvider.kt │ │ ├── TimeBasedUuidTest.java │ │ ├── TimeBasedUuidTypeAdapterTest.java │ │ ├── TopologicalOrderingTest.java │ │ └── VersionRepositoryTest.kt │ └── resources │ ├── base-sync-request-document-for-blog-owner.txt │ ├── base-sync-request-document-for-parent.txt │ ├── base-sync-request-paginating-blog-owners.txt │ ├── base-sync-request-with-predicate-group.txt │ ├── base-sync-request-with-predicate-match-none.txt │ ├── base-sync-request-with-predicate-operation.txt │ ├── conflict-unhandled-response.json │ ├── create-blog2.txt │ ├── create-comment-request.txt │ ├── create-nested-serialized-model-custom-type.txt │ ├── create-other-blog.txt │ ├── create-parent-request.txt │ ├── delete-item.txt │ ├── delete-person-with-predicate.txt │ ├── delta-sync-request-document-for-post.txt │ ├── meeting-response.json │ ├── mockito-extensions │ └── org.mockito.plugins.MockMaker │ ├── on-create-request-for-blog.txt │ ├── on-create-request-for-parent.txt │ ├── on-delete-request-for-blog-owner.txt │ ├── on-update-request-for-post.txt │ ├── robolectric.properties │ ├── sync-request-with-predicate.txt │ ├── update-blog-owner-only-changed-fields.txt │ ├── update-blog-owner-with-predicate.txt │ ├── update-meeting.txt │ ├── update-nested-serialized-model-custom-type.txt │ └── update-parent-with-predicate.txt ├── aws-geo-location ├── .gitignore ├── api │ └── aws-geo-location.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── geo │ │ └── location │ │ ├── Credentials.kt │ │ ├── GeoCanaryTest.kt │ │ ├── GeoCanaryTestGen2.kt │ │ ├── MapsApiTest.kt │ │ └── SearchApiTest.kt │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── geo │ │ └── location │ │ ├── AWSLocationGeoPlugin.kt │ │ ├── Errors.kt │ │ ├── configuration │ │ ├── GeoConfiguration.kt │ │ ├── MapsConfiguration.kt │ │ └── SearchIndicesConfiguration.kt │ │ ├── models │ │ └── AmazonLocationPlace.kt │ │ ├── options │ │ ├── AmazonLocationSearchByCoordinatesOptions.kt │ │ └── AmazonLocationSearchByTextOptions.kt │ │ └── service │ │ ├── AmazonLocationService.kt │ │ └── GeoService.kt │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── geo │ │ └── location │ │ └── configuration │ │ ├── GeoConfigurationTest.kt │ │ ├── MapsConfigurationTest.kt │ │ └── SearchIndicesConfigurationTest.kt │ └── resources │ └── robolectric.properties ├── aws-logging-cloudwatch ├── .gitignore ├── api │ └── aws-logging-cloudwatch.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ └── kotlin │ │ └── com │ │ └── amplifyframework │ │ └── logging │ │ └── cloudwatch │ │ └── db │ │ └── CloudWatchLoggingDatabaseInstrumentationTest.kt │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── logging │ │ └── cloudwatch │ │ ├── AWSCloudWatchLoggingPlugin.kt │ │ ├── AWSCloudWatchLoggingPluginImplementation.kt │ │ ├── CloudWatchLogManager.kt │ │ ├── CloudWatchLogger.kt │ │ ├── CustomCognitoCredentialsProvider.kt │ │ ├── DefaultRemoteLoggingConstraintProvider.kt │ │ ├── LoggingConstraintsResolver.kt │ │ ├── RemoteLoggingConstraintProvider.kt │ │ ├── db │ │ ├── CloudWatchDatabaseHelper.kt │ │ ├── CloudWatchLoggingDatabase.kt │ │ ├── LogEvent.kt │ │ └── LogEventTable.kt │ │ ├── models │ │ ├── AWSCloudWatchLoggingPluginConfiguration.kt │ │ ├── CloudWatchLogEvent.kt │ │ └── LoggingConstraints.kt │ │ └── worker │ │ ├── CloudwatchLogsSyncWorker.kt │ │ ├── CloudwatchRouterWorker.kt │ │ ├── CloudwatchWorkerFactory.kt │ │ └── RemoteConfigSyncWorker.kt │ └── test │ └── kotlin │ └── com │ └── amplifyframework │ └── logging │ └── cloudwatch │ ├── AWSCloudWatchLoggingPluginImplementationTest.kt │ ├── CloudWatchLogManagerTest.kt │ ├── CloudWatchLoggerTest.kt │ ├── DefaultRemoteLoggingConstraintProviderTest.kt │ └── LoggingConstraintsResolverTest.kt ├── aws-pinpoint-core ├── .gitignore ├── api │ └── aws-pinpoint-core.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── pinpoint │ │ └── core │ │ ├── AnalyticsClient.kt │ │ ├── AutoEventSubmitter.java │ │ ├── AutoSessionTracker.java │ │ ├── EventRecorder.kt │ │ ├── Session.kt │ │ ├── SessionClient.kt │ │ ├── TargetingClient.kt │ │ ├── data │ │ ├── AndroidAppDetails.kt │ │ └── AndroidDeviceDetails.kt │ │ ├── database │ │ ├── EventTable.kt │ │ ├── PinpointDatabase.kt │ │ └── PinpointDatabaseHelper.kt │ │ ├── endpointProfile │ │ ├── EndpointProfile.kt │ │ ├── EndpointProfileDemographic.kt │ │ ├── EndpointProfileLocation.kt │ │ └── EndpointProfileUser.kt │ │ ├── models │ │ ├── AWSPinpointUserProfileBehavior.kt │ │ ├── PinpointEvent.kt │ │ ├── PinpointSession.kt │ │ └── SDKInfo.kt │ │ └── util │ │ ├── DateUtil.kt │ │ ├── LocaleSerializer.kt │ │ └── SharedPreferencesUtil.kt │ └── test │ └── java │ └── com │ └── amplifyframework │ └── pinpoint │ └── core │ ├── AnalyticsClientTest.kt │ ├── AutoSessionTrackerTest.java │ ├── ConstructTargetingClasses.kt │ ├── EventRecorderTest.kt │ ├── SessionClientTest.kt │ ├── SessionTest.kt │ ├── SharedPreferencesUtilTest.kt │ ├── TargetingClientTest.kt │ ├── database │ └── PinpointDatabaseTest.kt │ ├── endpointProfile │ └── EndpointProfileTest.kt │ ├── models │ └── PinpointEventTest.kt │ └── util │ ├── DateUtilTest.kt │ └── SharedPrefsUniqueIdTest.kt ├── aws-predictions-tensorflow ├── .gitignore ├── api │ └── aws-predictions-tensorflow.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── predictions │ │ │ └── tensorflow │ │ │ ├── TensorFlowPredictionsEscapeHatch.java │ │ │ ├── TensorFlowPredictionsPlugin.java │ │ │ ├── adapter │ │ │ └── SentimentTypeAdapter.java │ │ │ ├── asset │ │ │ ├── Loadable.java │ │ │ ├── TextClassificationDictionary.java │ │ │ ├── TextClassificationLabels.java │ │ │ └── TextClassificationModel.java │ │ │ ├── operation │ │ │ ├── TensorFlowIdentifyOperation.java │ │ │ ├── TensorFlowInterpretOperation.java │ │ │ ├── TensorFlowTextToSpeechOperation.java │ │ │ └── TensorFlowTranslateTextOperation.java │ │ │ ├── request │ │ │ ├── TensorFlowTextClassificationRequest.java │ │ │ └── TensorFlowUnsupportedRequest.java │ │ │ └── service │ │ │ ├── TensorFlowPredictionsService.java │ │ │ └── TensorFlowTextClassificationService.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── predictions │ │ └── tensorflow │ │ ├── asset │ │ └── InputTokenizerTest.java │ │ └── service │ │ └── TextClassificationTest.java │ └── resources │ └── word-tokens.txt ├── aws-predictions ├── .gitignore ├── api │ └── aws-predictions.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ ├── assets │ │ ├── jeff_bezos.jpg │ │ ├── negative-review.txt │ │ ├── positive-review.txt │ │ ├── sample-form.png │ │ ├── sample-table-expected-text.txt │ │ ├── sample-table.png │ │ ├── sample-text-en.txt │ │ └── sample-text-fr.txt │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── predictions │ │ └── aws │ │ ├── AWSPredictionsIdentifyCelebritiesTest.java │ │ ├── AWSPredictionsIdentifyEntitiesTest.java │ │ ├── AWSPredictionsIdentifyLabelsTest.java │ │ ├── AWSPredictionsIdentifyTextTest.java │ │ ├── AWSPredictionsInterpretTest.java │ │ ├── AWSPredictionsTextToSpeechTest.java │ │ ├── AWSPredictionsTranslateTest.java │ │ ├── AmazonPollyPresigningClientTest.kt │ │ ├── PredictionsCanaryTest.kt │ │ └── TestPredictionsCategory.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── predictions │ │ │ └── aws │ │ │ ├── AWSPredictionsEscapeHatch.java │ │ │ ├── AWSPredictionsPlugin.java │ │ │ ├── AWSPredictionsPluginConfiguration.java │ │ │ ├── NetworkPolicy.java │ │ │ ├── adapter │ │ │ ├── EmotionTypeAdapter.kt │ │ │ ├── EntityTypeAdapter.kt │ │ │ ├── GenderBinaryTypeAdapter.kt │ │ │ ├── LandmarkTypeAdapter.kt │ │ │ ├── RekognitionResultTransformers.java │ │ │ ├── SentimentTypeAdapter.kt │ │ │ ├── SpeechTypeAdapter.kt │ │ │ └── TextractResultTransformers.java │ │ │ ├── configuration │ │ │ ├── IdentifyEntitiesConfiguration.java │ │ │ ├── IdentifyLabelsConfiguration.java │ │ │ ├── IdentifyTextConfiguration.java │ │ │ ├── InterpretTextConfiguration.java │ │ │ ├── SpeechGeneratorConfiguration.java │ │ │ └── TranslateTextConfiguration.java │ │ │ ├── exceptions │ │ │ ├── AccessDeniedException.kt │ │ │ ├── FaceLivenessSessionNotFoundException.kt │ │ │ └── FaceLivenessSessionTimeoutException.kt │ │ │ ├── http │ │ │ ├── AWSV4Signer.kt │ │ │ ├── LivenessEventStream.kt │ │ │ └── LivenessWebSocket.kt │ │ │ ├── models │ │ │ ├── AWSVoiceType.java │ │ │ ├── BinaryFeatureType.java │ │ │ ├── ColorChallenge.kt │ │ │ ├── ColorChallengeResponse.kt │ │ │ ├── ColorChallengeType.kt │ │ │ ├── ColorDisplayInformation.kt │ │ │ ├── FaceTargetChallenge.kt │ │ │ ├── FaceTargetChallengeResponse.kt │ │ │ ├── FaceTargetMatchingParameters.kt │ │ │ ├── InitialFaceDetected.kt │ │ │ ├── RgbColor.kt │ │ │ └── liveness │ │ │ │ ├── AccessDeniedException.kt │ │ │ │ ├── BoundingBox.kt │ │ │ │ ├── ChallengeConfig.kt │ │ │ │ ├── ClientChallenge.kt │ │ │ │ ├── ClientSessionInformationEvent.kt │ │ │ │ ├── ColorDisplayed.kt │ │ │ │ ├── ColorSequence.kt │ │ │ │ ├── DisconnectionEvent.kt │ │ │ │ ├── FaceMovementAndLightClientChallenge.kt │ │ │ │ ├── FaceMovementAndLightServerChallenge.kt │ │ │ │ ├── FreshnessColor.kt │ │ │ │ ├── InitialFace.kt │ │ │ │ ├── InternalServerException.kt │ │ │ │ ├── InvalidSignatureException.kt │ │ │ │ ├── LightChallengeType.kt │ │ │ │ ├── LivenessResponseStream.kt │ │ │ │ ├── OvalParameters.kt │ │ │ │ ├── ServerChallenge.kt │ │ │ │ ├── ServerSessionInformationEvent.kt │ │ │ │ ├── ServiceQuotaExceededException.kt │ │ │ │ ├── ServiceUnavailableException.kt │ │ │ │ ├── SessionInformation.kt │ │ │ │ ├── SessionNotFoundException.kt │ │ │ │ ├── TargetFace.kt │ │ │ │ ├── ThrottlingException.kt │ │ │ │ ├── UnrecognizedClientException.kt │ │ │ │ ├── ValidationException.kt │ │ │ │ └── VideoEvent.kt │ │ │ ├── operation │ │ │ ├── AWSIdentifyOperation.java │ │ │ ├── AWSInterpretOperation.java │ │ │ ├── AWSTextToSpeechOperation.java │ │ │ └── AWSTranslateTextOperation.java │ │ │ ├── options │ │ │ └── AWSFaceLivenessSessionOptions.kt │ │ │ ├── request │ │ │ ├── AWSComprehendRequest.java │ │ │ ├── AWSImageIdentifyRequest.java │ │ │ ├── AWSPollyRequest.java │ │ │ └── AWSTranslateRequest.java │ │ │ └── service │ │ │ ├── AWSComprehendService.kt │ │ │ ├── AWSPollyService.kt │ │ │ ├── AWSPredictionsService.java │ │ │ ├── AWSRekognitionService.kt │ │ │ ├── AWSTextractService.kt │ │ │ ├── AWSTranslateService.kt │ │ │ ├── AmazonPollyPresigningClient.kt │ │ │ ├── PresignedSynthesizeSpeechUrlOptions.kt │ │ │ └── RunFaceLivenessSession.kt │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── predictions │ │ └── aws │ │ ├── AWSPredictionsPluginConfigurationTest.java │ │ ├── AWSPredictionsPluginTest.kt │ │ ├── adapter │ │ ├── RekognitionResultTransformersTest.java │ │ └── TextractResultTransformersTest.java │ │ └── http │ │ ├── AWSV4SignerTest.kt │ │ ├── LivenessEventStreamTest.kt │ │ └── LivenessWebSocketTest.kt │ └── resources │ ├── configuration-with-identify-entities.json │ ├── configuration-with-identify-entity-matches.json │ ├── configuration-with-identify-labels.json │ ├── configuration-with-identify-text.json │ ├── configuration-with-interpret.json │ ├── configuration-with-region.json │ ├── configuration-with-text-to-speech.json │ ├── configuration-with-translate.json │ ├── configuration-without-region.json │ └── robolectric.properties ├── aws-push-notifications-pinpoint-common ├── .gitignore ├── api │ └── aws-push-notifications-pinpoint-common.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── pushnotifications │ │ │ └── pinpoint │ │ │ ├── PinpointNotificationPayload.kt │ │ │ ├── PushNotificationChannels.kt │ │ │ ├── PushNotificationsConstants.kt │ │ │ ├── PushNotificationsUtils.kt │ │ │ └── permissions │ │ │ ├── PermissionRequestChannel.kt │ │ │ ├── PermissionRequestResult.kt │ │ │ ├── PermissionsRequestActivity.kt │ │ │ └── PushNotificationPermission.kt │ └── res │ │ └── drawable │ │ └── ic_launcher_foreground.xml │ └── test │ └── java │ └── com │ └── amplifyframework │ └── pushnotifications │ └── pinpoint │ └── PushNotificationChannelsTest.kt ├── aws-push-notifications-pinpoint ├── .gitignore ├── README.md ├── api │ └── aws-push-notifications-pinpoint.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── pushnotifications │ │ │ └── pinpoint │ │ │ ├── AWSPinpointPushNotificationsActivity.kt │ │ │ ├── AWSPinpointPushNotificationsConfiguration.kt │ │ │ ├── AWSPinpointPushNotificationsPlugin.kt │ │ │ ├── EventSourceType.kt │ │ │ ├── FCMPushNotificationService.kt │ │ │ └── models │ │ │ └── AWSNotificationsUserProfile.kt │ └── res │ │ └── values │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── amplifyframework │ └── pushnotifications │ └── pinpoint │ ├── AWSPinpointPushNotificationsConfigurationTest.kt │ └── EventSourceTypeTest.kt ├── aws-storage-s3 ├── .gitignore ├── api │ └── aws-storage-s3.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── storage │ │ └── s3 │ │ ├── AWSS3StorageDownloadAccessLevelTest.java │ │ ├── AWSS3StorageDownloadTest.java │ │ ├── AWSS3StorageListAccessLevelTest.java │ │ ├── AWSS3StorageMultiBucketDownloadTest.kt │ │ ├── AWSS3StorageMultiBucketGetUrlTest.kt │ │ ├── AWSS3StorageMultiBucketListTest.kt │ │ ├── AWSS3StorageMultiBucketRemoveTest.kt │ │ ├── AWSS3StorageMultiBucketUploadTest.kt │ │ ├── AWSS3StoragePathDownloadTest.kt │ │ ├── AWSS3StoragePathGetUrlTest.kt │ │ ├── AWSS3StoragePathListTest.kt │ │ ├── AWSS3StoragePathRemoveTest.kt │ │ ├── AWSS3StoragePathUploadTest.kt │ │ ├── AWSS3StoragePrefixResolverTest.kt │ │ ├── AWSS3StorageRemoveTest.kt │ │ ├── AWSS3StorageSubPathStrategyListTest.kt │ │ ├── AWSS3StorageUploadAccessLevelTest.java │ │ ├── AWSS3StorageUploadTest.java │ │ ├── MobileClientIdentityIdSource.java │ │ ├── StorageCanaryTest.kt │ │ ├── StorageCanaryTestGen2.kt │ │ ├── StorageStressTest.kt │ │ ├── TestStorageCategory.java │ │ ├── UserCredentials.java │ │ ├── transfer │ │ └── TransferDBTest.kt │ │ └── util │ │ └── WorkmanagerTestUtils.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ └── storage │ │ │ └── s3 │ │ │ ├── AWSS3StoragePlugin.java │ │ │ ├── ServerSideEncryption.java │ │ │ ├── TransferOperations.kt │ │ │ ├── configuration │ │ │ ├── AWSS3PluginPrefixResolver.kt │ │ │ └── AWSS3StoragePluginConfiguration.kt │ │ │ ├── extensions │ │ │ ├── StorageExceptionExtensions.kt │ │ │ └── StoragePath.kt │ │ │ ├── operation │ │ │ ├── AWSS3StorageDownloadFileOperation.kt │ │ │ ├── AWSS3StorageGetPresignedUrlOperation.java │ │ │ ├── AWSS3StorageListOperation.java │ │ │ ├── AWSS3StoragePathDownloadFileOperation.kt │ │ │ ├── AWSS3StoragePathGetPresignedUrlOperation.kt │ │ │ ├── AWSS3StoragePathListOperation.kt │ │ │ ├── AWSS3StoragePathRemoveOperation.kt │ │ │ ├── AWSS3StoragePathUploadFileOperation.kt │ │ │ ├── AWSS3StoragePathUploadInputStreamOperation.kt │ │ │ ├── AWSS3StorageRemoveOperation.java │ │ │ ├── AWSS3StorageUploadFileOperation.kt │ │ │ └── AWSS3StorageUploadInputStreamOperation.kt │ │ │ ├── options │ │ │ ├── AWSS3StorageDownloadFileOptions.java │ │ │ ├── AWSS3StorageGetPresignedUrlOptions.java │ │ │ ├── AWSS3StorageListOptions.java │ │ │ ├── AWSS3StoragePagedListOptions.java │ │ │ ├── AWSS3StorageRemoveOptions.java │ │ │ ├── AWSS3StorageUploadFileOptions.java │ │ │ └── AWSS3StorageUploadInputStreamOptions.java │ │ │ ├── request │ │ │ ├── AWSS3StorageDownloadFileRequest.java │ │ │ ├── AWSS3StorageGetPresignedUrlRequest.java │ │ │ ├── AWSS3StorageListRequest.java │ │ │ ├── AWSS3StoragePathDownloadFileRequest.kt │ │ │ ├── AWSS3StoragePathGetPresignedUrlRequest.kt │ │ │ ├── AWSS3StoragePathListRequest.kt │ │ │ ├── AWSS3StoragePathRemoveRequest.kt │ │ │ ├── AWSS3StoragePathUploadRequest.kt │ │ │ ├── AWSS3StorageRemoveRequest.java │ │ │ └── AWSS3StorageUploadRequest.java │ │ │ ├── service │ │ │ ├── AWSS3StorageService.kt │ │ │ ├── AWSS3StorageServiceContainer.kt │ │ │ └── StorageService.java │ │ │ ├── transfer │ │ │ ├── ProgressListener.kt │ │ │ ├── ProgressListenerHttpInterceptor.kt │ │ │ ├── S3StorageTransferClientProvider.kt │ │ │ ├── StorageTransferClientProvider.kt │ │ │ ├── TransferDB.kt │ │ │ ├── TransferDBHelper.kt │ │ │ ├── TransferListener.kt │ │ │ ├── TransferManager.kt │ │ │ ├── TransferObserver.kt │ │ │ ├── TransferRecord.kt │ │ │ ├── TransferStatusUpdater.kt │ │ │ ├── TransferTable.kt │ │ │ ├── TransferType.kt │ │ │ ├── TransferWorkerObserver.kt │ │ │ ├── UploadOptions.kt │ │ │ └── worker │ │ │ │ ├── AbortMultiPartUploadWorker.kt │ │ │ │ ├── BaseTransferWorker.kt │ │ │ │ ├── BlockingTransferWorker.kt │ │ │ │ ├── CompleteMultiPartUploadWorker.kt │ │ │ │ ├── DownloadWorker.kt │ │ │ │ ├── InitiateMultiPartUploadTransferWorker.kt │ │ │ │ ├── PartUploadTransferWorker.kt │ │ │ │ ├── RouterWorker.kt │ │ │ │ ├── SinglePartUploadWorker.kt │ │ │ │ ├── SuspendingTransferWorker.kt │ │ │ │ └── TransferWorkerFactory.kt │ │ │ └── utils │ │ │ ├── JsonUtils.kt │ │ │ └── S3Keys.java │ └── res │ │ ├── drawable │ │ └── amplify_storage_transfer_notification_icon.xml │ │ └── values │ │ └── strings.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── storage │ │ ├── AWSS3StorageServiceContainerTest.kt │ │ ├── StoragePathTest.kt │ │ └── s3 │ │ ├── AWSS3StoragePluginTest.kt │ │ ├── StorageComponentTest.java │ │ ├── configuration │ │ └── AWSS3StoragePluginConfigurationTest.kt │ │ ├── operation │ │ ├── AWSS3StorageDownloadFileOperationTest.kt │ │ ├── AWSS3StorageGetPresignedUrlOperationTest.kt │ │ ├── AWSS3StorageListOperationTest.kt │ │ ├── AWSS3StoragePathDownloadFileOperationTest.kt │ │ ├── AWSS3StoragePathGetUrlOperationTest.kt │ │ ├── AWSS3StoragePathListOperationTest.kt │ │ ├── AWSS3StoragePathRemoveOperationTest.kt │ │ ├── AWSS3StoragePathUploadFileOperationTest.kt │ │ ├── AWSS3StoragePathUploadInputStreamOperationTest.kt │ │ ├── AWSS3StorageRemoveOperationTest.kt │ │ ├── AWSS3StorageUploadFileOperationTest.kt │ │ └── AWSS3StorageUploadInputStreamOperationTest.kt │ │ ├── transfer │ │ ├── TransferDBTest.kt │ │ └── worker │ │ │ ├── AbortMultiPartUploadWorkerTest.kt │ │ │ ├── DownloadWorkerTest.kt │ │ │ ├── ImmediateTaskExecutor.kt │ │ │ └── InitiateMultiPartUploadTransferWorkerTest.kt │ │ └── utils │ │ ├── JsonUtilsTest.kt │ │ └── S3KeysTest.java │ └── resources │ └── robolectric.properties ├── build.gradle.kts ├── canaries └── example │ ├── .gitignore │ ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── todo │ │ │ └── ExampleInstrumentedTest.kt │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── todo │ │ │ ├── MainActivity.java │ │ │ └── MyAmplifyApp.java │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── themes.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── codecov.yml ├── common-core ├── .gitignore ├── api │ └── common-core.api ├── build.gradle.kts ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── amplifyframework │ └── notifications │ └── pushnotifications │ └── NotificationPayload.kt ├── configuration ├── checkstyle-rules.xml ├── checkstyle-suppressions.xml ├── checkstyle.gradle ├── consumer-rules.pro ├── instrumentation-tests.gradle ├── java.header └── publishing.gradle ├── core-kotlin ├── .gitignore ├── CHANGELOG.md ├── api │ └── core-kotlin.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── kotlin │ │ ├── api │ │ ├── Api.kt │ │ ├── GraphQL.kt │ │ ├── KotlinApiFacade.kt │ │ └── Rest.kt │ │ ├── auth │ │ ├── Auth.kt │ │ └── KotlinAuthFacade.kt │ │ ├── core │ │ └── Amplify.kt │ │ ├── datastore │ │ ├── DataStore.kt │ │ └── KotlinDataStoreFacade.kt │ │ ├── geo │ │ ├── Geo.kt │ │ └── KotlinGeoFacade.kt │ │ ├── hub │ │ ├── Hub.kt │ │ └── KotlinHubFacade.kt │ │ ├── notifications │ │ ├── KotlinNotificationsFacade.kt │ │ ├── Notifications.kt │ │ └── pushnotifications │ │ │ ├── KotlinPushFacade.kt │ │ │ └── Push.kt │ │ ├── predictions │ │ ├── KotlinPredictionsFacade.kt │ │ └── Predictions.kt │ │ └── storage │ │ ├── KotlinStorageFacade.kt │ │ └── Storage.kt │ └── test │ └── java │ └── com │ └── amplifyframework │ └── kotlin │ ├── api │ └── KotlinApiFacadeTest.kt │ ├── auth │ └── KotlinAuthFacadeTest.kt │ ├── datastore │ └── KotlinDataStoreFacadeTest.kt │ ├── geo │ └── KotlinGeoFacadeTest.kt │ ├── hub │ └── KotlinHubFacadeTest.kt │ ├── notifications │ ├── KotlinNotificationsFacadeTest.kt │ └── pushnotifications │ │ └── KotlinPushNotificationsFacadeTest.kt │ ├── predictions │ └── KotlinPredictionsFacadeTest.kt │ └── storage │ └── KotlinStorageFacadeTest.kt ├── core ├── .gitignore ├── api │ └── core.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── core │ │ └── util │ │ └── UserAgentConfigurationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── amplifyframework │ │ │ ├── AmplifyException.java │ │ │ ├── analytics │ │ │ ├── AnalyticsBooleanProperty.java │ │ │ ├── AnalyticsCategory.java │ │ │ ├── AnalyticsCategoryBehavior.java │ │ │ ├── AnalyticsCategoryConfiguration.java │ │ │ ├── AnalyticsChannelEventName.java │ │ │ ├── AnalyticsDoubleProperty.java │ │ │ ├── AnalyticsEvent.java │ │ │ ├── AnalyticsEventBehavior.java │ │ │ ├── AnalyticsException.java │ │ │ ├── AnalyticsIntegerProperty.java │ │ │ ├── AnalyticsPlugin.java │ │ │ ├── AnalyticsProperties.java │ │ │ ├── AnalyticsPropertyBehavior.java │ │ │ ├── AnalyticsStringProperty.java │ │ │ └── UserProfile.java │ │ │ ├── api │ │ │ ├── ApiCategory.java │ │ │ ├── ApiCategoryBehavior.java │ │ │ ├── ApiCategoryConfiguration.java │ │ │ ├── ApiException.java │ │ │ ├── ApiOperation.java │ │ │ ├── ApiPlugin.java │ │ │ ├── events │ │ │ │ ├── ApiChannelEventName.java │ │ │ │ └── ApiEndpointStatusChangeEvent.java │ │ │ ├── graphql │ │ │ │ ├── GraphQLBehavior.java │ │ │ │ ├── GraphQLLocation.java │ │ │ │ ├── GraphQLOperation.java │ │ │ │ ├── GraphQLPathSegment.java │ │ │ │ ├── GraphQLRequest.java │ │ │ │ ├── GraphQLResponse.java │ │ │ │ ├── Operation.java │ │ │ │ ├── OperationType.java │ │ │ │ ├── PaginatedResult.java │ │ │ │ └── SimpleGraphQLRequest.java │ │ │ └── rest │ │ │ │ ├── HttpMethod.java │ │ │ │ ├── RestBehavior.java │ │ │ │ ├── RestOperation.java │ │ │ │ ├── RestOperationRequest.java │ │ │ │ ├── RestOptions.java │ │ │ │ └── RestResponse.java │ │ │ ├── auth │ │ │ ├── AuthCategory.java │ │ │ ├── AuthCategoryBehavior.java │ │ │ ├── AuthCategoryConfiguration.java │ │ │ ├── AuthChannelEventName.java │ │ │ ├── AuthCodeDeliveryDetails.java │ │ │ ├── AuthDevice.java │ │ │ ├── AuthException.kt │ │ │ ├── AuthFactorType.kt │ │ │ ├── AuthPlugin.java │ │ │ ├── AuthProvider.java │ │ │ ├── AuthSession.kt │ │ │ ├── AuthUser.java │ │ │ ├── AuthUserAttribute.java │ │ │ ├── AuthUserAttributeKey.java │ │ │ ├── MFAType.kt │ │ │ ├── TOTPSetupDetails.kt │ │ │ ├── exceptions │ │ │ │ ├── ConfigurationException.kt │ │ │ │ ├── InvalidStateException.kt │ │ │ │ ├── NotAuthorizedException.kt │ │ │ │ ├── ServiceException.kt │ │ │ │ ├── SessionExpiredException.kt │ │ │ │ ├── SignedOutException.kt │ │ │ │ ├── UnknownException.kt │ │ │ │ └── ValidationException.kt │ │ │ ├── options │ │ │ │ ├── AuthAssociateWebAuthnCredentialsOptions.kt │ │ │ │ ├── AuthConfirmResetPasswordOptions.java │ │ │ │ ├── AuthConfirmSignInOptions.java │ │ │ │ ├── AuthConfirmSignUpOptions.java │ │ │ │ ├── AuthDeleteWebAuthnCredentialOptions.kt │ │ │ │ ├── AuthFetchSessionOptions.kt │ │ │ │ ├── AuthListWebAuthnCredentialsOptions.kt │ │ │ │ ├── AuthResendSignUpCodeOptions.java │ │ │ │ ├── AuthResendUserAttributeConfirmationCodeOptions.java │ │ │ │ ├── AuthResetPasswordOptions.java │ │ │ │ ├── AuthSignInOptions.java │ │ │ │ ├── AuthSignOutOptions.java │ │ │ │ ├── AuthSignUpOptions.java │ │ │ │ ├── AuthUpdateUserAttributeOptions.java │ │ │ │ ├── AuthUpdateUserAttributesOptions.java │ │ │ │ ├── AuthVerifyTOTPSetupOptions.java │ │ │ │ └── AuthWebUISignInOptions.java │ │ │ └── result │ │ │ │ ├── AuthListWebAuthnCredentialsResult.kt │ │ │ │ ├── AuthResetPasswordResult.java │ │ │ │ ├── AuthSessionResult.java │ │ │ │ ├── AuthSignInResult.java │ │ │ │ ├── AuthSignOutResult.kt │ │ │ │ ├── AuthSignUpResult.java │ │ │ │ ├── AuthUpdateAttributeResult.java │ │ │ │ └── step │ │ │ │ ├── AuthNextResetPasswordStep.java │ │ │ │ ├── AuthNextSignInStep.java │ │ │ │ ├── AuthNextSignUpStep.java │ │ │ │ ├── AuthNextUpdateAttributeStep.java │ │ │ │ ├── AuthResetPasswordStep.java │ │ │ │ ├── AuthSignInStep.java │ │ │ │ ├── AuthSignUpStep.java │ │ │ │ └── AuthUpdateAttributeStep.java │ │ │ ├── core │ │ │ ├── Action.java │ │ │ ├── Amplify.java │ │ │ ├── AmplifyConfiguration.java │ │ │ ├── Consumer.java │ │ │ ├── InitializationResult.java │ │ │ ├── InitializationStatus.java │ │ │ ├── NoOpAction.java │ │ │ ├── NoOpConsumer.java │ │ │ ├── NullableConsumer.java │ │ │ ├── Resources.java │ │ │ ├── async │ │ │ │ ├── AmplifyOperation.java │ │ │ │ ├── Cancelable.java │ │ │ │ ├── NoOpCancelable.java │ │ │ │ └── Resumable.java │ │ │ ├── category │ │ │ │ ├── Category.java │ │ │ │ ├── CategoryConfiguration.java │ │ │ │ ├── CategoryInitializationResult.java │ │ │ │ ├── CategoryType.java │ │ │ │ ├── CategoryTypeable.java │ │ │ │ ├── EmptyCategoryConfiguration.java │ │ │ │ └── SubCategoryType.java │ │ │ ├── configuration │ │ │ │ ├── AmplifyOutputs.kt │ │ │ │ ├── AmplifyOutputsData.kt │ │ │ │ └── AuthUserAttributeKeySerializer.kt │ │ │ ├── model │ │ │ │ ├── AuthRule.java │ │ │ │ ├── AuthStrategy.java │ │ │ │ ├── CustomTypeField.java │ │ │ │ ├── CustomTypeSchema.java │ │ │ │ ├── LoadedModelReferenceImpl.kt │ │ │ │ ├── Model.java │ │ │ │ ├── ModelAssociation.java │ │ │ │ ├── ModelConverter.java │ │ │ │ ├── ModelException.kt │ │ │ │ ├── ModelField.java │ │ │ │ ├── ModelIdentifier.java │ │ │ │ ├── ModelIndex.java │ │ │ │ ├── ModelList.kt │ │ │ │ ├── ModelOperation.java │ │ │ │ ├── ModelPropertyPath.kt │ │ │ │ ├── ModelProvider.java │ │ │ │ ├── ModelReference.kt │ │ │ │ ├── ModelSchema.java │ │ │ │ ├── PrimaryKey.java │ │ │ │ ├── SchemaRegistry.java │ │ │ │ ├── SchemaRegistryUtils.kt │ │ │ │ ├── SerializedCustomType.java │ │ │ │ ├── SerializedModel.java │ │ │ │ ├── annotations │ │ │ │ │ ├── AuthRule.java │ │ │ │ │ ├── BelongsTo.java │ │ │ │ │ ├── HasMany.java │ │ │ │ │ ├── HasOne.java │ │ │ │ │ ├── Index.java │ │ │ │ │ ├── Indexes.java │ │ │ │ │ ├── Indices.java │ │ │ │ │ ├── ModelConfig.java │ │ │ │ │ └── ModelField.java │ │ │ │ └── query │ │ │ │ │ ├── ObserveQueryOptions.java │ │ │ │ │ ├── Page.java │ │ │ │ │ ├── QueryOptions.java │ │ │ │ │ ├── QueryPaginationInput.java │ │ │ │ │ ├── QuerySortBy.java │ │ │ │ │ ├── QuerySortOrder.java │ │ │ │ │ ├── Where.java │ │ │ │ │ └── predicate │ │ │ │ │ ├── BeginsWithQueryOperator.java │ │ │ │ │ ├── BetweenQueryOperator.java │ │ │ │ │ ├── ContainsQueryOperator.java │ │ │ │ │ ├── EqualQueryOperator.java │ │ │ │ │ ├── Evaluable.java │ │ │ │ │ ├── GreaterOrEqualQueryOperator.java │ │ │ │ │ ├── GreaterThanQueryOperator.java │ │ │ │ │ ├── LessOrEqualQueryOperator.java │ │ │ │ │ ├── LessThanQueryOperator.java │ │ │ │ │ ├── MatchAllQueryPredicate.java │ │ │ │ │ ├── MatchNoneQueryPredicate.java │ │ │ │ │ ├── NotContainsQueryOperator.java │ │ │ │ │ ├── NotEqualQueryOperator.java │ │ │ │ │ ├── QueryField.java │ │ │ │ │ ├── QueryOperator.java │ │ │ │ │ ├── QueryPredicate.java │ │ │ │ │ ├── QueryPredicateGroup.java │ │ │ │ │ ├── QueryPredicateOperation.java │ │ │ │ │ └── QueryPredicates.java │ │ │ ├── plugin │ │ │ │ └── Plugin.java │ │ │ └── store │ │ │ │ ├── AmplifyKeyValueRepository.kt │ │ │ │ ├── EncryptedKeyValueRepository.kt │ │ │ │ ├── InMemoryKeyValueRepository.kt │ │ │ │ ├── InMemoryKeyValueRepositoryProvider.kt │ │ │ │ └── KeyValueRepository.kt │ │ │ ├── datastore │ │ │ ├── DataStoreCategory.java │ │ │ ├── DataStoreCategoryBehavior.java │ │ │ ├── DataStoreCategoryConfiguration.java │ │ │ ├── DataStoreChannelEventName.java │ │ │ ├── DataStoreException.java │ │ │ ├── DataStoreItemChange.java │ │ │ ├── DataStorePlugin.java │ │ │ ├── DataStoreQuerySnapshot.java │ │ │ └── events │ │ │ │ ├── ModelSyncedEvent.java │ │ │ │ ├── NetworkStatusEvent.java │ │ │ │ ├── NonApplicableDataReceivedEvent.java │ │ │ │ ├── OutboxStatusEvent.java │ │ │ │ └── SyncQueriesStartedEvent.java │ │ │ ├── devmenu │ │ │ ├── DevMenuDeviceFragment.java │ │ │ ├── DevMenuEnvironmentFragment.java │ │ │ ├── DevMenuFileIssueFragment.java │ │ │ ├── DevMenuLogsFragment.java │ │ │ ├── DevMenuMainFragment.java │ │ │ ├── DeveloperMenu.java │ │ │ ├── DeveloperMenuActivity.java │ │ │ ├── DeviceInfo.java │ │ │ ├── EnvironmentInfo.java │ │ │ ├── LogEntry.java │ │ │ ├── PersistentLogStoragePlugin.java │ │ │ ├── PersistentLogger.java │ │ │ └── ShakeDetector.java │ │ │ ├── geo │ │ │ ├── GeoCategory.java │ │ │ ├── GeoCategoryBehavior.java │ │ │ ├── GeoCategoryConfiguration.java │ │ │ ├── GeoCategoryPlugin.java │ │ │ ├── GeoException.java │ │ │ ├── models │ │ │ │ ├── BoundingBox.java │ │ │ │ ├── Coordinates.java │ │ │ │ ├── CountryCode.java │ │ │ │ ├── Geometry.java │ │ │ │ ├── MapStyle.java │ │ │ │ ├── MapStyleDescriptor.java │ │ │ │ ├── Place.java │ │ │ │ └── SearchArea.java │ │ │ ├── options │ │ │ │ ├── GeoSearchByCoordinatesOptions.java │ │ │ │ ├── GeoSearchByTextOptions.java │ │ │ │ └── GetMapStyleDescriptorOptions.java │ │ │ └── result │ │ │ │ └── GeoSearchResult.java │ │ │ ├── hub │ │ │ ├── AWSHubPlugin.java │ │ │ ├── HubCategory.java │ │ │ ├── HubCategoryBehavior.java │ │ │ ├── HubCategoryConfiguration.java │ │ │ ├── HubChannel.java │ │ │ ├── HubEvent.java │ │ │ ├── HubEventFilter.java │ │ │ ├── HubEventFilters.java │ │ │ ├── HubException.java │ │ │ ├── HubPlugin.java │ │ │ ├── HubSubscriber.java │ │ │ └── SubscriptionToken.java │ │ │ ├── logging │ │ │ ├── AndroidLogger.java │ │ │ ├── AndroidLoggingPlugin.java │ │ │ ├── BroadcastLogger.java │ │ │ ├── JavaLogger.java │ │ │ ├── JavaLoggingPlugin.java │ │ │ ├── LogLevel.java │ │ │ ├── Logger.java │ │ │ ├── LoggingCategory.java │ │ │ ├── LoggingCategoryBehavior.java │ │ │ ├── LoggingCategoryConfiguration.java │ │ │ ├── LoggingEventName.kt │ │ │ ├── LoggingException.java │ │ │ └── LoggingPlugin.java │ │ │ ├── notifications │ │ │ ├── NotificationsCategory.kt │ │ │ ├── NotificationsCategoryBehavior.kt │ │ │ ├── NotificationsCategoryConfiguration.kt │ │ │ ├── NotificationsException.kt │ │ │ ├── NotificationsPlugin.kt │ │ │ └── pushnotifications │ │ │ │ ├── PushNotificationResult.kt │ │ │ │ ├── PushNotificationsCategory.kt │ │ │ │ ├── PushNotificationsCategoryBehavior.kt │ │ │ │ ├── PushNotificationsException.kt │ │ │ │ └── PushNotificationsPlugin.kt │ │ │ ├── predictions │ │ │ ├── PredictionsCategory.java │ │ │ ├── PredictionsCategoryBehavior.java │ │ │ ├── PredictionsCategoryConfiguration.java │ │ │ ├── PredictionsException.java │ │ │ ├── PredictionsPlugin.java │ │ │ ├── models │ │ │ │ ├── AgeRange.java │ │ │ │ ├── BinaryFeature.java │ │ │ │ ├── BoundedKeyValue.java │ │ │ │ ├── Celebrity.java │ │ │ │ ├── CelebrityDetails.java │ │ │ │ ├── Cell.java │ │ │ │ ├── ChallengeResponseEvent.kt │ │ │ │ ├── Emotion.java │ │ │ │ ├── EmotionType.java │ │ │ │ ├── Entity.java │ │ │ │ ├── EntityDetails.java │ │ │ │ ├── EntityMatch.java │ │ │ │ ├── EntityType.java │ │ │ │ ├── FaceLivenessSession.kt │ │ │ │ ├── FaceLivenessSessionChallenge.kt │ │ │ │ ├── FaceLivenessSessionInformation.kt │ │ │ │ ├── Feature.java │ │ │ │ ├── FeatureType.java │ │ │ │ ├── Gender.java │ │ │ │ ├── GenderBinaryType.java │ │ │ │ ├── IdentifiedText.java │ │ │ │ ├── IdentifyAction.java │ │ │ │ ├── IdentifyActionType.java │ │ │ │ ├── ImageFeature.java │ │ │ │ ├── KeyPhrase.java │ │ │ │ ├── Label.java │ │ │ │ ├── LabelType.java │ │ │ │ ├── Landmark.java │ │ │ │ ├── LandmarkType.java │ │ │ │ ├── Language.java │ │ │ │ ├── LanguageType.java │ │ │ │ ├── Polygon.java │ │ │ │ ├── Pose.java │ │ │ │ ├── Selection.java │ │ │ │ ├── Sentiment.java │ │ │ │ ├── SentimentType.java │ │ │ │ ├── SpeechType.java │ │ │ │ ├── Syntax.java │ │ │ │ ├── Table.java │ │ │ │ ├── TextFeature.java │ │ │ │ ├── TextFormatType.java │ │ │ │ ├── VideoEvent.kt │ │ │ │ └── VoiceType.java │ │ │ ├── operation │ │ │ │ ├── IdentifyOperation.java │ │ │ │ ├── InterpretOperation.java │ │ │ │ ├── TextToSpeechOperation.java │ │ │ │ └── TranslateTextOperation.java │ │ │ ├── options │ │ │ │ ├── FaceLivenessSessionOptions.kt │ │ │ │ ├── IdentifyOptions.java │ │ │ │ ├── InterpretOptions.java │ │ │ │ ├── TextToSpeechOptions.java │ │ │ │ └── TranslateTextOptions.java │ │ │ └── result │ │ │ │ ├── IdentifyCelebritiesResult.java │ │ │ │ ├── IdentifyDocumentTextResult.java │ │ │ │ ├── IdentifyEntitiesResult.java │ │ │ │ ├── IdentifyEntityMatchesResult.java │ │ │ │ ├── IdentifyLabelsResult.java │ │ │ │ ├── IdentifyResult.java │ │ │ │ ├── IdentifyTextResult.java │ │ │ │ ├── InterpretResult.java │ │ │ │ ├── TextToSpeechResult.java │ │ │ │ └── TranslateTextResult.java │ │ │ ├── storage │ │ │ ├── BucketInfo.kt │ │ │ ├── InvalidStorageBucketException.kt │ │ │ ├── ObjectMetadata.kt │ │ │ ├── StorageAccessLevel.java │ │ │ ├── StorageBucket.kt │ │ │ ├── StorageCategory.java │ │ │ ├── StorageCategoryBehavior.java │ │ │ ├── StorageCategoryConfiguration.java │ │ │ ├── StorageChannelEventName.java │ │ │ ├── StorageException.java │ │ │ ├── StorageFilePermissionException.kt │ │ │ ├── StorageItem.kt │ │ │ ├── StoragePath.kt │ │ │ ├── StoragePathValidationException.kt │ │ │ ├── StoragePlugin.java │ │ │ ├── TransferState.kt │ │ │ ├── operation │ │ │ │ ├── StorageDownloadFileOperation.java │ │ │ │ ├── StorageGetUrlOperation.java │ │ │ │ ├── StorageListOperation.java │ │ │ │ ├── StorageRemoveOperation.java │ │ │ │ ├── StorageTransferOperation.java │ │ │ │ ├── StorageUploadFileOperation.java │ │ │ │ ├── StorageUploadInputStreamOperation.java │ │ │ │ └── StorageUploadOperation.java │ │ │ ├── options │ │ │ │ ├── StorageDownloadFileOptions.java │ │ │ │ ├── StorageGetUrlOptions.java │ │ │ │ ├── StorageListOptions.java │ │ │ │ ├── StorageOptions.java │ │ │ │ ├── StoragePagedListOptions.java │ │ │ │ ├── StorageRemoveOptions.java │ │ │ │ ├── StorageUploadFileOptions.java │ │ │ │ ├── StorageUploadInputStreamOptions.java │ │ │ │ ├── StorageUploadOptions.java │ │ │ │ └── SubpathStrategy.kt │ │ │ └── result │ │ │ │ ├── StorageDownloadFileResult.java │ │ │ │ ├── StorageGetUrlResult.java │ │ │ │ ├── StorageListResult.java │ │ │ │ ├── StorageRemoveResult.java │ │ │ │ ├── StorageTransferProgress.java │ │ │ │ ├── StorageTransferResult.java │ │ │ │ ├── StorageUploadFileResult.java │ │ │ │ ├── StorageUploadInputStreamResult.java │ │ │ │ └── StorageUploadResult.java │ │ │ └── util │ │ │ ├── Casing.java │ │ │ ├── Empty.java │ │ │ ├── Environment.java │ │ │ ├── ExceptionExtensions.kt │ │ │ ├── FieldFinder.java │ │ │ ├── ForEach.java │ │ │ ├── Immutable.java │ │ │ ├── Range.java │ │ │ ├── Time.java │ │ │ ├── UserAgent.java │ │ │ └── Wrap.java │ └── res │ │ ├── layout │ │ ├── activity_dev_menu.xml │ │ ├── dev_menu_fragment_device.xml │ │ ├── dev_menu_fragment_environment.xml │ │ ├── dev_menu_fragment_file_issue.xml │ │ ├── dev_menu_fragment_logs.xml │ │ └── dev_menu_fragment_main.xml │ │ ├── menu │ │ └── dev_menu_logs_menu.xml │ │ ├── navigation │ │ └── dev_menu_nav_graph.xml │ │ └── values │ │ ├── dev_menu_strings.xml │ │ └── dev_menu_styles.xml │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ ├── analytics │ │ ├── AnalyticsBooleanPropertyTest.java │ │ ├── AnalyticsDoublePropertyTest.java │ │ ├── AnalyticsEventTest.java │ │ ├── AnalyticsIntegerPropertyTest.java │ │ ├── AnalyticsPropertiesTest.java │ │ └── AnalyticsStringPropertyTest.java │ │ ├── api │ │ └── rest │ │ │ └── RestOptionsTest.java │ │ ├── auth │ │ └── AuthPluginTest.kt │ │ ├── core │ │ ├── AmplifyConfigurationTest.java │ │ ├── AmplifyTest.java │ │ ├── BadInitLoggingPlugin.java │ │ ├── SimpleLoggingPlugin.java │ │ ├── category │ │ │ ├── CategoryTest.java │ │ │ ├── FakeCategory.java │ │ │ ├── FakeCategoryConfiguration.java │ │ │ ├── FakePlugin.java │ │ │ ├── SimpleCategory.java │ │ │ ├── SimpleCategoryConfiguration.java │ │ │ └── SimplePlugin.java │ │ ├── configuration │ │ │ └── AmplifyOutputsDataTest.kt │ │ ├── model │ │ │ ├── CustomTypeSchemaTest.java │ │ │ ├── LoadedModelReferenceImplTest.kt │ │ │ ├── ModelConverterTest.java │ │ │ ├── ModelIdentifierTest.kt │ │ │ ├── ModelPathTest.kt │ │ │ ├── ModelSchemaAuthRulesTest.java │ │ │ ├── ModelSchemaTest.java │ │ │ ├── ModelTest.java │ │ │ ├── SchemaRegistryUtilsTest.kt │ │ │ ├── SerializedModeTest.java │ │ │ └── query │ │ │ │ └── predicate │ │ │ │ ├── OperatorTest.java │ │ │ │ └── PredicateTest.java │ │ └── store │ │ │ ├── AmplifyKeyValueRepositoryTest.kt │ │ │ ├── EncryptedKeyValueRepositoryTest.kt │ │ │ └── InMemoryKeyValueRepositoryProviderTest.kt │ │ ├── devmenu │ │ ├── PersistentLogStoragePluginTest.java │ │ └── ShakeDetectorTest.java │ │ ├── hub │ │ ├── AWSHubPluginTest.java │ │ └── HubEventDataObjectsTest.java │ │ ├── logging │ │ ├── AndroidLoggingPluginTest.java │ │ ├── FakeLogger.java │ │ ├── FakeLoggingPlugin.java │ │ ├── LoggerTest.kt │ │ └── LoggingCategoryTest.java │ │ ├── storage │ │ └── SubpathStrategyTest.kt │ │ └── util │ │ ├── CasingTest.java │ │ ├── EmptyTest.java │ │ ├── FieldFinderTest.java │ │ ├── RangeTests.java │ │ ├── UserAgentTest.java │ │ └── WrapTest.java │ └── resources │ ├── logging-config.json │ ├── no-shake-accel-values.csv │ ├── robolectric.properties │ ├── serialized-custom-type-nested-data.json │ ├── serialized-model-nests-custom-type-data.json │ └── shake-accel-values.csv ├── documents ├── MobileSDK_To_AmplifyAndroid.md └── OkHttp4.md ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── kover.gradle ├── maplibre-adapter ├── .gitignore ├── api │ └── maplibre-adapter.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidTest │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── geo │ │ └── maplibre │ │ ├── Credentials.kt │ │ ├── MapViewStressTest.kt │ │ ├── MapViewTestActivity.kt │ │ └── MapViewTestActivityTest.kt │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── amplifyframework │ │ └── geo │ │ └── maplibre │ │ ├── AmplifyMapLibreAdapter.kt │ │ ├── Coordinate2D.kt │ │ ├── http │ │ └── AWSRequestSignerInterceptor.kt │ │ ├── util │ │ ├── AddressFormatter.kt │ │ ├── Coordinates.kt │ │ └── Place.kt │ │ └── view │ │ ├── AmplifyMapView.kt │ │ ├── ClusteringOptions.kt │ │ ├── MapLibreView.kt │ │ ├── MapViewOptions.kt │ │ ├── SearchResultItemView.kt │ │ ├── SearchResultListView.kt │ │ ├── SearchTextField.kt │ │ └── support │ │ ├── AttributionInfoView.kt │ │ ├── MapControls.kt │ │ ├── PlaceInfoPopupView.kt │ │ └── ViewExtensions.kt │ └── res │ ├── drawable-hdpi │ ├── place.png │ └── place_active.png │ ├── drawable-mdpi │ ├── place.png │ └── place_active.png │ ├── drawable-xhdpi │ ├── place.png │ └── place_active.png │ ├── drawable-xxhdpi │ ├── place.png │ └── place_active.png │ ├── drawable │ ├── ic_baseline_add_24.xml │ ├── ic_baseline_clear_24.xml │ ├── ic_baseline_format_list_bulleted_24.xml │ ├── ic_baseline_map_24.xml │ ├── ic_baseline_minus_24.xml │ ├── ic_baseline_navigation_24.xml │ ├── ic_baseline_search_24.xml │ ├── ic_twotone_info_24.xml │ ├── map_attribution_text_background.xml │ ├── map_control_background.xml │ ├── map_control_divider.xml │ ├── map_search_input_icon_spacer.xml │ ├── map_search_sheet_handle_background.xml │ └── map_search_update_background.xml │ ├── values-night │ └── colors.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml ├── rxbindings ├── .gitignore ├── README.md ├── api │ └── rxbindings.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── rx │ │ ├── AmplifyDisposables.java │ │ ├── RxAdapters.java │ │ ├── RxAmplify.java │ │ ├── RxApiBinding.java │ │ ├── RxApiCategoryBehavior.java │ │ ├── RxAuthBinding.java │ │ ├── RxAuthCategoryBehavior.java │ │ ├── RxDataStoreBinding.java │ │ ├── RxDataStoreCategoryBehavior.java │ │ ├── RxGeoBinding.java │ │ ├── RxGeoCategoryBehavior.java │ │ ├── RxGraphQlBehavior.java │ │ ├── RxHubBinding.java │ │ ├── RxHubCategoryBehavior.java │ │ ├── RxNotificationsBinding.java │ │ ├── RxNotificationsCategoryBehavior.java │ │ ├── RxOperations.java │ │ ├── RxPredictionsBinding.java │ │ ├── RxPredictionsCategoryBehavior.java │ │ ├── RxPushNotificationsBinding.java │ │ ├── RxPushNotificationsCategoryBehavior.java │ │ ├── RxRestBehavior.java │ │ ├── RxStorageBinding.java │ │ └── RxStorageCategoryBehavior.java │ └── test │ ├── java │ └── com │ │ └── amplifyframework │ │ └── rx │ │ ├── Matchers.java │ │ ├── RxAdaptersTest.java │ │ ├── RxAmplifyTest.java │ │ ├── RxApiBindingTest.java │ │ ├── RxAuthBindingTest.java │ │ ├── RxDataStoreBindingTest.java │ │ ├── RxGeoBindingTest.kt │ │ ├── RxHubBindingTest.java │ │ ├── RxNotificationsBindingTest.java │ │ ├── RxPredictionsBindingTest.java │ │ ├── RxPushNotificationsBindingTest.java │ │ └── RxStorageBindingTest.java │ └── resources │ └── robolectric.properties ├── scripts ├── Gemfile ├── Gemfile.lock ├── codebuild_build.sh ├── fastlane │ ├── Appfile │ ├── Fastfile │ └── Pluginfile ├── generate_df_testrun_report ├── nightly-buildspec.yml ├── pull_backend_config_from_amplify ├── pull_backend_config_from_s3 ├── python │ ├── generate_df_testrun_report.py │ ├── instrumentation_parser.py │ └── metrics.py ├── retry.sh ├── run_canary_in_devicefarm.sh ├── run_nightly_tests_in_devicefarm_pool.sh └── run_test_in_devicefarm.sh ├── settings.gradle.kts ├── testmodels ├── .gitignore ├── build.gradle.kts └── src │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── amplifyframework │ │ └── testmodels │ │ ├── commentsblog │ │ ├── AmplifyModelProvider.java │ │ ├── Author.java │ │ ├── Blog.java │ │ ├── Blog2.java │ │ ├── Blog3.java │ │ ├── BlogOwner.java │ │ ├── BlogOwner2.java │ │ ├── BlogOwner3.java │ │ ├── BlogOwnerWithCustomPK.java │ │ ├── Comment.java │ │ ├── OtherBlog.java │ │ ├── Post.java │ │ ├── Post2.java │ │ ├── PostStatus.java │ │ └── schema.graphql │ │ ├── cpk │ │ ├── AmplifyModelProvider.java │ │ ├── Blog.java │ │ ├── BlogCPK.java │ │ ├── BlogOwnerCPK.java │ │ ├── Comment.java │ │ ├── IntModelWithIdentifier.java │ │ ├── IntModelWithoutIdentifier.java │ │ ├── Item.java │ │ ├── Post.java │ │ ├── PostCPK.java │ │ ├── StringModelWithIdentifier.java │ │ ├── User.java │ │ └── schema.graphql │ │ ├── customprimarykey │ │ ├── AmplifyModelProvider.java │ │ ├── Blog.java │ │ ├── BlogOwnerWithCustomPK.java │ │ ├── BlogWithCustomHasOne.java │ │ ├── BlogWithDefaultHasOne.java │ │ ├── Comment.java │ │ ├── Item.java │ │ ├── ModelCompositeMultiplePk.java │ │ ├── Post.java │ │ ├── User.java │ │ └── schema.graphql │ │ ├── ecommerce │ │ ├── AmplifyModelProvider.java │ │ ├── Customer.java │ │ ├── Item.java │ │ ├── Order.java │ │ ├── Status.java │ │ └── schema.graphql │ │ ├── flat │ │ ├── AmplifyModelProvider.java │ │ ├── Model1.java │ │ └── Model2.java │ │ ├── lazy │ │ ├── AmplifyModelProvider.java │ │ ├── Blog.java │ │ ├── BlogPath.java │ │ ├── Comment.java │ │ ├── CommentPath.java │ │ ├── Post.java │ │ ├── PostPath.java │ │ └── schema.graphql │ │ ├── meeting │ │ ├── Meeting.java │ │ └── schema.graphql │ │ ├── multiauth │ │ ├── GroupPrivatePublicUPIAMAPIPost.java │ │ ├── GroupPrivateUPIAMPost.java │ │ ├── GroupPublicUPAPIPost.java │ │ ├── GroupPublicUPIAMPost.java │ │ ├── GroupUPPost.java │ │ ├── MultiAuthTestModelProvider.java │ │ ├── OwnerOIDCPost.java │ │ ├── OwnerPrivatePublicUPIAMAPIPost.java │ │ ├── OwnerPrivateUPIAMPost.java │ │ ├── OwnerPublicOIDAPIPost.java │ │ ├── OwnerPublicUPAPIPost.java │ │ ├── OwnerPublicUPIAMPost.java │ │ ├── OwnerUPPost.java │ │ ├── PrivateIAMPost.java │ │ ├── PrivatePrivatePublicUPIAMAPIPost.java │ │ ├── PrivatePrivatePublicUPIAMIAMPost.java │ │ ├── PrivatePrivateUPIAMPost.java │ │ ├── PrivatePublicComboAPIPost.java │ │ ├── PrivatePublicComboUPPost.java │ │ ├── PrivatePublicIAMAPIPost.java │ │ ├── PrivatePublicPublicUPAPIIAMPost.java │ │ ├── PrivatePublicUPAPIPost.java │ │ ├── PrivatePublicUPIAMPost.java │ │ ├── PrivateUPPost.java │ │ ├── PublicAPIPost.java │ │ ├── PublicIAMPost.java │ │ ├── PublicPublicIAMAPIPost.java │ │ └── schema.graphql │ │ ├── noteswithauth │ │ ├── AmplifyModelProvider.java │ │ ├── PrivateNote.java │ │ ├── PublicNote.java │ │ ├── Task.java │ │ └── schema.graphql │ │ ├── ownerauth │ │ ├── OwnerAuth.java │ │ ├── OwnerAuthCustomField.java │ │ ├── OwnerAuthExplicit.java │ │ ├── OwnerAuthNonDefaultProvider.java │ │ ├── OwnerAuthReadUpdateOnly.java │ │ └── schema.graphql │ │ ├── parenting │ │ ├── Address.java │ │ ├── AmplifyModelProvider.java │ │ ├── Child.java │ │ ├── City.java │ │ ├── Parent.java │ │ ├── Phonenumber.java │ │ └── schema.graphql │ │ ├── personcar │ │ ├── AmplifyCliGeneratedModelProvider.java │ │ ├── Car.java │ │ ├── MaritalStatus.java │ │ ├── Person.java │ │ ├── PersonWithCPK.java │ │ └── RandomVersionModelProvider.java │ │ ├── phonecall │ │ ├── AmplifyModelProvider.java │ │ ├── Call.java │ │ ├── Person.java │ │ ├── Phone.java │ │ └── schema.graphql │ │ ├── ratingsblog │ │ ├── Blog.java │ │ ├── Post.java │ │ ├── PostEditor.java │ │ ├── Rating.java │ │ ├── User.java │ │ └── schema.graphql │ │ ├── teamproject │ │ ├── Projectfields.java │ │ └── Team.java │ │ ├── todo │ │ ├── AmplifyModelProvider.java │ │ ├── Todo.java │ │ ├── TodoOwner.java │ │ ├── TodoStatus.java │ │ └── schema.graphql │ │ └── transformerV2 │ │ ├── schema.graphql │ │ └── schemadrift │ │ ├── EnumDrift.java │ │ ├── SchemaDrift.java │ │ └── SchemaDriftModelProvider.java │ └── test │ └── java │ └── com │ └── amplifyframework │ └── testmodels │ ├── commentsblog │ └── BlogOwnerTest.java │ └── lazy │ └── LazyTypeTest.kt └── testutils ├── .gitignore ├── build.gradle.kts └── src ├── main ├── AndroidManifest.xml ├── java │ └── com │ │ └── amplifyframework │ │ └── testutils │ │ ├── AmplifyDisposables.java │ │ ├── Assets.java │ │ ├── Await.java │ │ ├── CountdownLatchExtensions.kt │ │ ├── EqualsToStringHashValidator.java │ │ ├── FeatureAssert.java │ │ ├── FileAssert.java │ │ ├── HubAccumulator.java │ │ ├── HubAccumulatorExtensions.kt │ │ ├── Latch.java │ │ ├── ModelAssert.java │ │ ├── RepeatRule.kt │ │ ├── Resources.java │ │ ├── SimpleCancelable.java │ │ ├── Sleep.java │ │ ├── Varargs.java │ │ ├── VoidResult.java │ │ ├── configuration │ │ └── AmplifyOutputsDataBuilder.kt │ │ ├── coroutines │ │ └── RunBlockingWithTimeout.kt │ │ ├── mocks │ │ └── ApiMocking.java │ │ ├── random │ │ ├── RandomBytes.java │ │ ├── RandomModel.java │ │ ├── RandomString.java │ │ └── RandomTempFile.java │ │ └── sync │ │ ├── SynchronousApi.java │ │ ├── SynchronousAuth.java │ │ ├── SynchronousDataStore.java │ │ ├── SynchronousGeo.java │ │ ├── SynchronousPredictions.java │ │ ├── SynchronousStorage.java │ │ └── TestCategory.java └── res │ └── values │ └── strings.xml └── test └── java └── com └── amplifyframework └── testutils ├── HubAccumulatorTest.java └── VarargsTest.java /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{kt,kts}] 2 | #this is to match java checkstyle 3 | max_line_length=120 4 | ktlint_code_style=android_studio 5 | 6 | # Disabled rules 7 | ktlint_standard_class-signature = disabled # don't force parameters onto one line in constructors 8 | ktlint_standard_value-parameter-comment = disabled # Allow same-line comments in parameters 9 | 10 | # Disable ktlint on generated source code, see 11 | # https://github.com/JLLeitschuh/ktlint-gradle/issues/746 12 | [**/build/generated/**] 13 | ktlint = disabled -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @aws-amplify/amplify-android 2 | 3 | # Changes to api surface require admin approval 4 | *.api @aws-amplify/amplify-android-admins 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yaml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: I want help writing my Amplify application 4 | url: https://discord.com/invite/amplify 5 | about: Check out the `*-help` channels on Amplify's community Discord to ask your questions about building applications with the Android or other Amplify libraries. -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | - [ ] PR title and description conform to [Pull Request](https://github.com/aws-amplify/amplify-android/blob/main/CONTRIBUTING.md#pull-request-guidelines) guidelines. 2 | 3 | *Issue #, if available:* 4 | 5 | *Description of changes:* 6 | 7 | *How did you test these changes?* 8 | (Please add a line here how the changes were tested) 9 | 10 | *Documentation update required?* 11 | - [ ] No 12 | - [ ] Yes (Please include a PR link for the documentation update) 13 | 14 | *General Checklist* 15 | - [ ] Added Unit Tests 16 | - [ ] Added Integration Tests 17 | - [ ] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc) 18 | - [ ] Ensure commit message has the appropriate scope (e.g `fix(storage): message`, `feat(auth): message`, `chore(all): message`) 19 | 20 | By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. 21 | -------------------------------------------------------------------------------- /.github/pr-title-checker-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "LABEL": { 3 | "name": "Title Needs Formatting", 4 | "color": "FF5733" 5 | }, 6 | "CHECKS": { 7 | "prefixes": ["chore: ", "refactor: ", "perf: ", "test: ", "docs: ", "release: "], 8 | "regexp": "(fix|feat)\\((all|analytics|api|auth|core|datastore|geo|predictions|storage|notifications|apollo)\\): ", 9 | "regexpFlags": "", 10 | "ignoreLabels" : ["ignore-pr-title"] 11 | }, 12 | "MESSAGES": { 13 | "success": "All OK", 14 | "failure": "Your title is not formatted correctly. Please see https://github.com/aws-amplify/amplify-android/blob/main/CONTRIBUTING.md#pull-request-guidelines for guidelines.", 15 | "notice": "" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.github/workflows/codecov_code_coverage.yml: -------------------------------------------------------------------------------- 1 | name: Run code coverage 2 | 3 | on: 4 | push: 5 | branches: 6 | - 'main' 7 | pull_request: 8 | branches: 9 | - 'main' 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2 17 | 18 | - name: Setup Java 19 | uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3 20 | with: 21 | java-version: '17' 22 | distribution: 'corretto' 23 | 24 | - name: Run test and generate kover report 25 | run: ./gradlew koverXmlReport 26 | 27 | - name: Upload Test Report 28 | uses: codecov/codecov-action@v5 29 | with: 30 | name: report 31 | files: build/reports/kover/report.xml 32 | token: ${{ secrets.CODECOV_TOKEN }} 33 | -------------------------------------------------------------------------------- /.github/workflows/issue_labeled.yml: -------------------------------------------------------------------------------- 1 | name: Issue Labeled 2 | on: 3 | issues: 4 | types: [labeled] 5 | 6 | jobs: 7 | remove-pending-triage-label: 8 | runs-on: ubuntu-latest 9 | if: ${{ contains(fromJSON('["question", "bug", "feature-request"]'), github.event.label.name) }} 10 | permissions: 11 | issues: write 12 | steps: 13 | - name: Remove the pending-triage label 14 | shell: bash 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | ISSUE_NUMBER: ${{ github.event.issue.number }} 18 | REPOSITORY_NAME: ${{ github.event.repository.full_name }} 19 | run: | 20 | gh issue edit $ISSUE_NUMBER --repo $REPOSITORY_NAME --remove-label "pending-triage" -------------------------------------------------------------------------------- /.github/workflows/notify_pull_request.yml: -------------------------------------------------------------------------------- 1 | name: Notify Pull Request 2 | 3 | on: 4 | pull_request: 5 | types: [opened, ready_for_review, reopened] 6 | 7 | jobs: 8 | notify: 9 | runs-on: ubuntu-latest 10 | if: ${{ !github.event.pull_request.draft }} 11 | steps: 12 | - name: Run webhook curl command 13 | env: 14 | WEBHOOK_URL: ${{ secrets.SLACK_PR_WEBHOOK_URL }} 15 | URL: ${{ github.event.pull_request.html_url }} 16 | TITLE: ${{ github.event.pull_request.title }} 17 | USER: ${{ github.event.pull_request.user.login }} 18 | shell: bash 19 | run: curl -s POST "$WEBHOOK_URL" -H "Content-Type:application/json" --data "{\"url\":\"$URL\", \"title\":\"$TITLE\", \"user\":\"$USER\"}" 20 | -------------------------------------------------------------------------------- /.github/workflows/pr_title_checker.yml: -------------------------------------------------------------------------------- 1 | # Runs a check to verify PRs have a valid title 2 | 3 | name: "PR Title Checker" 4 | on: 5 | pull_request_target: 6 | types: 7 | - opened 8 | - edited 9 | - synchronize 10 | - labeled 11 | - unlabeled 12 | 13 | jobs: 14 | check: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: thehanimo/pr-title-checker@v1.3.5 18 | with: 19 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 20 | pass_on_octokit_error: false 21 | configuration_path: ".github/pr-title-checker-config.json" 22 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: "Close stale issues" 2 | 3 | on: 4 | schedule: 5 | - cron: "30 1 * * *" 6 | 7 | jobs: 8 | stale: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/stale@a20b814fb01b71def3bd6f56e7494d667ddf28da # v4 12 | with: 13 | repo-token: ${{ secrets.GITHUB_TOKEN }} 14 | operations-per-run: 200 15 | stale-issue-message: "This issue is stale since it's been open 30 days with no activity. This will be closed in 7 days unless the `Closing Soon` label is removed or a comment is added. Thank you for your contributions." 16 | close-issue-message: "This issue was closed since it's been 7 days with no activity." 17 | stale-issue-label: "closing soon" 18 | debug-only: true 19 | days-before-stale: 30 20 | days-before-close: 7 21 | # PRs wont go stale 22 | days-before-pr-stale: -1 23 | # Issues with any of these labels are checked. 24 | any-of-labels: "pending-community-response, closing soon" 25 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Amplify for Android 2 | Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | -------------------------------------------------------------------------------- /annotations/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /annotations/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=annotations 2 | POM_NAME=Amplify Framework for Android - Annotations 3 | POM_DESCRIPTION=Amplify Framework for Android - Annotations for AWS Amplify Libraries 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /annotations/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/apollo/apollo-appsync-amplify/consumer-rules.pro -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=apollo-appsync-amplify 2 | POM_NAME=Apollo AppSync - Amplify Extensions 3 | POM_DESCRIPTION=Allows Apollo to connect to AppSync using Amplify Framework for authorization 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/androidTest/backend/README.md: -------------------------------------------------------------------------------- 1 | npx ampx sandbox -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/androidTest/backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apollo-test-backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "@aws-amplify/backend": "^1.14.3", 14 | "@aws-amplify/backend-cli": "^1.5.0", 15 | "aws-cdk": "^2.1005.0", 16 | "aws-cdk-lib": "^2.189.1", 17 | "constructs": "^10.4.2", 18 | "esbuild": "^0.25.1", 19 | "tsx": "^4.19.3", 20 | "typescript": "^5.8.2" 21 | }, 22 | "dependencies": { 23 | "aws-amplify": "^6.13.6", 24 | "aws-lambda": "^1.0.7" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/androidTest/graphql/Mutations.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateTodo($createTodoInput: CreateTodoInput!) { 2 | createTodo(input: $createTodoInput) { 3 | ... todoFragment 4 | } 5 | } 6 | 7 | mutation DeleteTodo($deleteTodoInput: DeleteTodoInput!) { 8 | deleteTodo(input: $deleteTodoInput) { 9 | ...todoFragment 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/androidTest/graphql/Queries.graphql: -------------------------------------------------------------------------------- 1 | query GetTodo($id: ID!) { 2 | getTodo(id: $id) { 3 | ... todoFragment 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/androidTest/graphql/Subscriptions.graphql: -------------------------------------------------------------------------------- 1 | subscription onCreateSubscription { 2 | onCreateTodo { 3 | ... todoFragment 4 | } 5 | } 6 | 7 | subscription onDeleteSubscription { 8 | onDeleteTodo { 9 | ... todoFragment 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/androidTest/graphql/TodoFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment todoFragment on Todo { 2 | id 3 | updatedAt 4 | createdAt 5 | content 6 | owner 7 | } 8 | -------------------------------------------------------------------------------- /apollo/apollo-appsync-amplify/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apollo/apollo-appsync/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /apollo/apollo-appsync/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=apollo-appsync 2 | POM_NAME=Apollo AppSync 3 | POM_DESCRIPTION=Allows Apollo to connect to AppSync 4 | POM_PACKAGING=jar 5 | -------------------------------------------------------------------------------- /apollo/apollo-appsync/src/main/java/com/amplifyframework/apollo/appsync/util/UserAgentHeader.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.apollo.appsync.util 17 | 18 | internal object UserAgentHeader { 19 | 20 | const val NAME = "User-Agent" 21 | 22 | val value: String by lazy { 23 | "UA/2.0 lib/aws-appsync-apollo-extensions-android#${PackageInfo.version}" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /apollo/version.properties: -------------------------------------------------------------------------------- 1 | VERSION_NAME=1.2.0 2 | -------------------------------------------------------------------------------- /appsync/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Release 1.0.0 2 | 3 | Initial Release 4 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-amplify/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-amplify/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_GROUP=com.amazonaws 2 | POM_ARTIFACT_ID=aws-sdk-appsync-amplify 3 | POM_NAME=Amplify Extensions for AWS AppSync 4 | POM_DESCRIPTION=Amplify Extensions for AWS AppSync 5 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-core/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_GROUP=com.amazonaws 2 | POM_ARTIFACT_ID=aws-sdk-appsync-core 3 | POM_NAME=AWS AppSync Core for Android 4 | POM_DESCRIPTION=AWS AppSync Core for Android 5 | POM_PACKAGING=jar 6 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_GROUP=com.amazonaws 2 | POM_ARTIFACT_ID=aws-sdk-appsync-events 3 | POM_NAME=AWS AppSync Events for Android 4 | POM_DESCRIPTION=AWS AppSync Events Library for Android 5 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/backend/README.md: -------------------------------------------------------------------------------- 1 | ## AWS Amplify + AWS AppSync Events Template 2 | 3 | ## Getting Started 4 | 5 | 1. Setup AWS Account with Amplify 6 | 7 | https://docs.amplify.aws/android/start/account-setup/ 8 | 9 | 2. Install dependencies: 10 | 11 | ```bash 12 | npm install 13 | ``` 14 | 15 | 3. Deploy Sandbox 16 | 17 | ```bash 18 | npx ampx sandbox 19 | ``` 20 | 21 | 4. Make note of the amplify_outputs.json file that was generated. You will need to copy this file to the test project. -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/backend/amplify.yml: -------------------------------------------------------------------------------- 1 | version: 1 2 | backend: 3 | phases: 4 | build: 5 | commands: 6 | - npm ci 7 | - npx ampx pipeline-deploy --branch $AWS_BRANCH --app-id $AWS_APP_ID 8 | frontend: 9 | phases: 10 | build: 11 | commands: 12 | - mkdir ./dist && touch ./dist/index.html 13 | artifacts: 14 | baseDirectory: dist 15 | files: 16 | - '**/*' 17 | cache: 18 | paths: 19 | - node_modules/**/* 20 | - .npm/**/* 21 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/backend/amplify/auth/resource.ts: -------------------------------------------------------------------------------- 1 | import { defineAuth } from '@aws-amplify/backend'; 2 | 3 | /** 4 | * Define and configure your auth resource 5 | * @see https://docs.amplify.aws/gen2/build-a-backend/auth 6 | */ 7 | export const auth = defineAuth({ 8 | loginWith: { 9 | email: true, 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/backend/amplify/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/backend/amplify/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2022", 4 | "module": "es2022", 5 | "moduleResolution": "bundler", 6 | "resolveJsonModule": true, 7 | "esModuleInterop": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "strict": true, 10 | "skipLibCheck": true, 11 | "paths": { 12 | "$amplify/*": [ 13 | "../.amplify/generated/*" 14 | ] 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "amplify-events-app", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "@aws-amplify/backend": "^1.16.0", 14 | "@aws-amplify/backend-cli": "^1.7.0", 15 | "aws-cdk": "^2.1012.0", 16 | "aws-cdk-lib": "^2.192.0", 17 | "constructs": "^10.4.2", 18 | "esbuild": "^0.25.3", 19 | "tsx": "^4.19.4", 20 | "typescript": "^5.8.3" 21 | }, 22 | "dependencies": { 23 | "aws-amplify": "^6.14.4" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/androidTest/java/com/amazonaws/sdk/appsync/events/testmodels/TestUser.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amazonaws.sdk.appsync.events.testmodels 16 | 17 | import kotlinx.serialization.Serializable 18 | 19 | @Serializable 20 | data class TestUser( 21 | val name: String = "John Doe", 22 | val handle: String = "@johndoe" 23 | ) 24 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/main/java/com/amazonaws/sdk/appsync/events/data/EventsMessage.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amazonaws.sdk.appsync.events.data 16 | 17 | import kotlinx.serialization.json.JsonElement 18 | 19 | /** 20 | * An event received through a subscription. 21 | * 22 | * @property data of the received event, formatted in json. 23 | */ 24 | data class EventsMessage(val data: JsonElement) 25 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/main/java/com/amazonaws/sdk/appsync/events/utils/JsonUtils.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amazonaws.sdk.appsync.events.utils 17 | 18 | import kotlinx.serialization.json.Json 19 | 20 | internal object JsonUtils { 21 | fun createJsonForLibrary() = Json { 22 | encodeDefaults = true 23 | ignoreUnknownKeys = true 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/test/resources/publish_errors.json: -------------------------------------------------------------------------------- 1 | { 2 | "errors" : [ { 3 | "errorType" : "BadRequestException", 4 | "message" : "Input exceeded 5 event limit" 5 | } ] 6 | } -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/test/resources/publish_multi_failure.json: -------------------------------------------------------------------------------- 1 | { 2 | "failed": [ 3 | { 4 | "identifier": "e36a7438-d960-435f-a426-3c685d38ac92", 5 | "index": 0, 6 | "code": 401, 7 | "message": "error1" 8 | }, 9 | { 10 | "identifier": "e36a7438-d960-435f-a426-3c685d38ac92", 11 | "index": 1, 12 | "code": 401, 13 | "message": "error2" 14 | } 15 | ], 16 | "successful": [] 17 | } -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/test/resources/publish_multi_partial_success.json: -------------------------------------------------------------------------------- 1 | { 2 | "failed": [ 3 | { 4 | "identifier": "e36a7438-d960-435f-a426-3c685d38ac92", 5 | "index": 1, 6 | "code": 401, 7 | "message": "error" 8 | } 9 | ], 10 | "successful": [ 11 | { 12 | "identifier": "b067a246-0983-4c68-ab68-496c03cc0b18", 13 | "index": 0 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /appsync/aws-sdk-appsync-events/src/test/resources/publish_single_success.json: -------------------------------------------------------------------------------- 1 | { 2 | "failed": [], 3 | "successful": [ 4 | { 5 | "identifier": "521b8766-4333-4736-bb9a-a4e999307917", 6 | "index": 0 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /appsync/version.properties: -------------------------------------------------------------------------------- 1 | VERSION_NAME=1.0.0 2 | -------------------------------------------------------------------------------- /aws-analytics-pinpoint/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-analytics-pinpoint/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-analytics-pinpoint 2 | POM_NAME=Amplify Framework for Android - Analytics 3 | POM_DESCRIPTION=Amplify Framework for Android - Analytics Plugin for Amazon Pinpoint 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-analytics-pinpoint/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-analytics-pinpoint/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-analytics-pinpoint/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | -------------------------------------------------------------------------------- /aws-api-appsync/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | 3 | -------------------------------------------------------------------------------- /aws-api-appsync/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-api-appsync 2 | POM_NAME=Amplify Framework for Android - AppSync 3 | POM_DESCRIPTION=Amplify Framework for Android - Shared components used by API and Datastore categories for interacting with AWS AppSync. 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-api-appsync/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/blog-owner-with-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "45a5f600-8aa8-41ac-a529-aed75036f5be", 3 | "name": "Tony Danielsen", 4 | "_lastChangedAt": 1594858827, 5 | "_version": 3, 6 | "_deleted": false 7 | } 8 | 9 | -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/gson-util.json: -------------------------------------------------------------------------------- 1 | { 2 | "array": [ 3 | [ 4 | "foo", 5 | 0, 6 | 2, 7 | 3.5, 8 | true, 9 | false, 10 | null 11 | ], 12 | { 13 | "someString": "bar" 14 | } 15 | ], 16 | "object" : { 17 | "someString": "baz", 18 | "someInteger": 4, 19 | "someFloat" : 5.5, 20 | "someBoolean" : false, 21 | "someNull" : null 22 | } 23 | } -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/selection-set-lazy-empty-includes.txt: -------------------------------------------------------------------------------- 1 | { 2 | blog { 3 | id 4 | } 5 | createdAt 6 | id 7 | name 8 | updatedAt 9 | } -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/selection-set-lazy-with-includes.txt: -------------------------------------------------------------------------------- 1 | { 2 | blog { 3 | createdAt 4 | id 5 | name 6 | posts { 7 | items { 8 | blog { 9 | id 10 | } 11 | createdAt 12 | id 13 | name 14 | updatedAt 15 | } 16 | } 17 | updatedAt 18 | } 19 | comments { 20 | items { 21 | createdAt 22 | id 23 | post { 24 | blog { 25 | id 26 | } 27 | createdAt 28 | id 29 | name 30 | updatedAt 31 | } 32 | text 33 | updatedAt 34 | } 35 | } 36 | createdAt 37 | id 38 | name 39 | updatedAt 40 | } 41 | -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/selection-set-nested-serialized-model-serialized-custom-type.txt: -------------------------------------------------------------------------------- 1 | { 2 | address { 3 | city 4 | line1 5 | line2 6 | phoneNumber { 7 | area 8 | country 9 | number 10 | } 11 | postalCode 12 | state 13 | } 14 | name 15 | phones { 16 | area 17 | country 18 | number 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/selection-set-ownerauth.txt: -------------------------------------------------------------------------------- 1 | { 2 | id 3 | owner 4 | title 5 | } -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/selection-set-parent.txt: -------------------------------------------------------------------------------- 1 | { 2 | address { 3 | city 4 | country 5 | phonenumber { 6 | carrier 7 | code 8 | number 9 | } 10 | street 11 | street2 12 | } 13 | children { 14 | address { 15 | city 16 | country 17 | phonenumber { 18 | carrier 19 | code 20 | number 21 | } 22 | street 23 | street2 24 | } 25 | name 26 | } 27 | id 28 | name 29 | } -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/selection-set-post-nested.txt: -------------------------------------------------------------------------------- 1 | { 2 | items { 3 | blog { 4 | id 5 | name 6 | } 7 | id 8 | title 9 | } 10 | nextToken 11 | } -------------------------------------------------------------------------------- /aws-api-appsync/src/test/resources/serialized-model-with-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "_deleted": false, 3 | "comments":null, 4 | "_lastChangedAt": 1594858827, 5 | "created":"2022-02-19T00:05:26.607465000", 6 | "rating":12, 7 | "blog":null, 8 | "title":"52 TITLE", 9 | "tags":null, 10 | "createdAt":"2022-02-19T00:05:33.564Z", 11 | "id":"21ee0180-60a4-45d9-b68e-018c260cc742", 12 | "_version":3, 13 | "updatedAt":"2022-03-04T05:36:26.629Z", 14 | "__typename": "Post" 15 | } 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-api/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-api/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-api 2 | POM_NAME=Amplify Framework for Android - API 3 | POM_DESCRIPTION=Amplify Framework for Android - API Plugin for REST and GraphQL 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/assets/create-comment.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateComment($eventId: ID!, $commentId:String!, $content: String!, $createdAt: String!) { 2 | createComment(input: {commentId: $commentId, eventId: $eventId, content: $content, createdAt: $createdAt}) { 3 | eventId 4 | content 5 | createdAt 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/assets/create-event.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateEvent($name: String!, $when: String!, $where: String!, $description: String!) { 2 | createEvent(input: {name: $name, when: $when, where: $where, description: $description}) { 3 | id 4 | name 5 | where 6 | when 7 | description 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/assets/list-events.graphql: -------------------------------------------------------------------------------- 1 | query ListEvents { 2 | listEvents { 3 | items { 4 | id 5 | name 6 | } 7 | } 8 | } 9 | 10 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/assets/subscribe-event-comments.graphql: -------------------------------------------------------------------------------- 1 | subscription SubscribeToEventComments($eventId: String!) { 2 | subscribeToEventComments(eventId: $eventId) { 3 | content 4 | } 5 | } 6 | 7 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/java/com/amplifyframework/datastore/generated/model/BlogPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.generated.model; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the Blog type in your schema. */ 10 | public final class BlogPath extends ModelPath { 11 | private PostPath posts; 12 | BlogPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, Blog.class); 14 | } 15 | 16 | public synchronized PostPath getPosts() { 17 | if (posts == null) { 18 | posts = new PostPath("posts", true, this); 19 | } 20 | return posts; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/java/com/amplifyframework/datastore/generated/model/CommentPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.generated.model; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the Comment type in your schema. */ 10 | public final class CommentPath extends ModelPath { 11 | private PostPath post; 12 | CommentPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, Comment.class); 14 | } 15 | 16 | public synchronized PostPath getPost() { 17 | if (post == null) { 18 | post = new PostPath("post", false, this); 19 | } 20 | return post; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/java/com/amplifyframework/datastore/generated/model/HasManyChildPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.generated.model; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the HasManyChild type in your schema. */ 10 | public final class HasManyChildPath extends ModelPath { 11 | private ParentPath parent; 12 | HasManyChildPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, HasManyChild.class); 14 | } 15 | 16 | public synchronized ParentPath getParent() { 17 | if (parent == null) { 18 | parent = new ParentPath("parent", false, this); 19 | } 20 | return parent; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/java/com/amplifyframework/datastore/generated/model/HasOneChildPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.generated.model; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the HasOneChild type in your schema. */ 10 | public final class HasOneChildPath extends ModelPath { 11 | HasOneChildPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 12 | super(name, isCollection, parent, HasOneChild.class); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/java/com/amplifyframework/datastore/generated/model/ProjectPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.generated.model; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the Project type in your schema. */ 10 | public final class ProjectPath extends ModelPath { 11 | private TeamPath team; 12 | ProjectPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, Project.class); 14 | } 15 | 16 | public synchronized TeamPath getTeam() { 17 | if (team == null) { 18 | team = new TeamPath("team", false, this); 19 | } 20 | return team; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aws-api/src/androidTest/java/com/amplifyframework/datastore/generated/model/TeamPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.generated.model; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the Team type in your schema. */ 10 | public final class TeamPath extends ModelPath { 11 | private ProjectPath project; 12 | TeamPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, Team.class); 14 | } 15 | 16 | public synchronized ProjectPath getProject() { 17 | if (project == null) { 18 | project = new ProjectPath("project", false, this); 19 | } 20 | return project; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aws-api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /aws-api/src/main/java/com/amplifyframework/api/aws/GraphQLRequestVariable.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.api.aws 17 | 18 | /** 19 | * Holds information needed for a single variable for model querying 20 | */ 21 | internal data class GraphQLRequestVariable(val key: String, val value: Any, val type: String) 22 | -------------------------------------------------------------------------------- /aws-api/src/main/java/com/amplifyframework/api/aws/sigv4/ApiKeyAuthProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.api.aws.sigv4; 17 | 18 | /** 19 | * Interface to provide API key to signer. 20 | */ 21 | public interface ApiKeyAuthProvider { 22 | /** 23 | * Gets the API key. 24 | * @return API key 25 | */ 26 | String getAPIKey(); 27 | } 28 | -------------------------------------------------------------------------------- /aws-api/src/main/java/com/amplifyframework/api/aws/sigv4/FunctionAuthProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.api.aws.sigv4; 17 | 18 | /** 19 | * Interface to provide an authentication token to the caller to be used in an AWS Lambda function. 20 | */ 21 | @FunctionalInterface 22 | public interface FunctionAuthProvider extends AuthProvider { } 23 | -------------------------------------------------------------------------------- /aws-api/src/main/java/com/amplifyframework/api/aws/sigv4/OidcAuthProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.api.aws.sigv4; 17 | 18 | /** 19 | * Interface to provide an authentication token to the caller to be used for OpenID Connect authorization. 20 | */ 21 | @FunctionalInterface 22 | public interface OidcAuthProvider extends AuthProvider { } 23 | -------------------------------------------------------------------------------- /aws-api/src/main/java/com/amplifyframework/api/aws/utils/JSONObjectExtensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.api.aws.utils 17 | 18 | import org.json.JSONObject 19 | 20 | internal fun JSONObject.toStringMap(): Map { 21 | val map = mutableMapOf() 22 | this.keys().forEach { key -> map[key] = this.getString(key) } 23 | return map 24 | } 25 | -------------------------------------------------------------------------------- /aws-api/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/base-sync-posts-response-items.json: -------------------------------------------------------------------------------- 1 | {"id":"5A11A110-11E5-4996-B544-43AC41F98B94","title":"Post title 1","status":"ACTIVE","rating":5,"_version":3,"_deleted":null,"_lastChangedAt":1575157431299} 2 | {"id":"id1","title":"Post title 1","status":"ACTIVE","rating":5,"_version":5,"_deleted":null,"_lastChangedAt":1575157367139} 3 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/base-sync-posts-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "syncPosts": { 4 | "items": [ 5 | { 6 | "id": "5A11A110-11E5-4996-B544-43AC41F98B94", 7 | "title": "Post title 1", 8 | "status": "ACTIVE", 9 | "rating": 5, 10 | "_version": 3, 11 | "_deleted": null, 12 | "_lastChangedAt": 1575157431299 13 | }, 14 | { 15 | "id": "id1", 16 | "title": "Post title 1", 17 | "status": "ACTIVE", 18 | "rating": 5, 19 | "_version": 5, 20 | "_deleted": null, 21 | "_lastChangedAt": 1575157367139 22 | } 23 | ], 24 | "nextToken": null, 25 | "startedAt": 1575157616210 26 | } 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/blog-owners-query-results.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "listBlogOwners": { 4 | "items": [ 5 | { 6 | "id": "5347fffb-c6a4-40b8-b582-02e7f4d0d165", 7 | "name": "Curly" 8 | }, 9 | { 10 | "id": "77410d39-53fd-4ba9-bed0-412e1b210458", 11 | "name": "Moe" 12 | }, 13 | { 14 | "id": "1b12a1f0-b772-47ba-a9fc-69ba35f449ff5", 15 | "name": "Larry" 16 | } 17 | ], 18 | "nextToken" : "IkFRSUNBSGg5OUIvN3BjWU41eE96NDZJMW5GeGM4eyJ2ZXJzaW9uIjoyLCJ0b2tlbiI6" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateItem($input: CreateItemInput!) {\n createItem(input: $input) {\n createdAt\n customKey\n name\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "input": { 5 | "customKey": "ck1", 6 | "name": "name1" 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "createItem": { 4 | "createdAt": "2023-06-12T14:52:20.881Z", 5 | "customKey": "ck1", 6 | "name": "name1", 7 | "updatedAt": "2023-06-12T14:52:20.881Z" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create_with_multiple_sk_null_parent_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "updatePost": { 4 | "blog": null, 5 | "comments": { 6 | "items": [], 7 | "nextToken": null 8 | }, 9 | "createdAt": "2023-06-10T16:22:30.48Z", 10 | "postId": "detachedPostId", 11 | "rating": 4.1, 12 | "title": "Detached Post", 13 | "updatedAt": "2023-06-12T18:37:30.986Z" 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create_with_parent_with_multiple_sk.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateComment($input: CreateCommentInput!) {\n createComment(input: $input) {\n commentId\n content\n createdAt\n post {\n blog {\n blogAuthorId\n blogId\n createdAt\n name\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "input": { 5 | "postCommentsPostId": "p1", 6 | "commentId": "c1", 7 | "postCommentsCreatedAt": "2023-06-09T16:22:30.48Z", 8 | "postCommentsRating": 3.4, 9 | "postCommentsTitle": "t1", 10 | "content": "content1" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create_with_parent_with_multiple_sk_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "createComment": { 4 | "commentId": "c1", 5 | "content": "content1", 6 | "createdAt": "2023-06-12T14:52:20.378Z", 7 | "post": { 8 | "blog": { 9 | "blogAuthorId": "a1", 10 | "blogId": "b1", 11 | "createdAt": "2023-06-12T14:52:19.863Z", 12 | "name": "name1", 13 | "siteId": "s1", 14 | "updatedAt": "2023-06-12T14:52:19.863Z" 15 | }, 16 | "comments": { 17 | "items": [], 18 | "nextToken": null 19 | }, 20 | "createdAt": "2023-06-09T16:22:30.48Z", 21 | "postId": "p1", 22 | "rating": 3.4, 23 | "title": "t1", 24 | "updatedAt": "2023-06-12T14:52:20.122Z" 25 | }, 26 | "updatedAt": "2023-06-12T14:52:20.378Z" 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create_with_sk.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateBlog($input: CreateBlogInput!) {\n createBlog(input: $input) {\n author {\n createdAt\n id\n updatedAt\n }\n blogAuthorId\n blogId\n createdAt\n name\n posts {\n items {\n blog {\n blogAuthorId\n blogId\n createdAt\n name\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n nextToken\n }\n siteId\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "input": { 5 | "name": "name1", 6 | "siteId": "s1", 7 | "blogAuthorId": "a1", 8 | "blogId": "b1" 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_create_with_sk_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "createBlog": { 4 | "author": { 5 | "createdAt": "2023-06-12T14:52:19.678Z", 6 | "id": "a1", 7 | "updatedAt": "2023-06-12T14:52:19.678Z" 8 | }, 9 | "blogAuthorId": "a1", 10 | "blogId": "b1", 11 | "createdAt": "2023-06-12T14:52:19.863Z", 12 | "name": "name1", 13 | "posts": { 14 | "items": [], 15 | "nextToken": null 16 | }, 17 | "siteId": "s1", 18 | "updatedAt": "2023-06-12T14:52:19.863Z" 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_delete.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation DeletePost($input: DeletePostInput!) {\n deletePost(input: $input) {\n blog {\n author {\n createdAt\n id\n updatedAt\n }\n blogAuthorId\n blogId\n createdAt\n name\n posts {\n items {\n createdAt\n postId\n rating\n title\n updatedAt\n }\n nextToken\n }\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n post {\n createdAt\n postId\n rating\n title\n updatedAt\n }\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "input": { 5 | "createdAt": "2023-06-09T16:22:30.48Z", 6 | "rating": 3.4, 7 | "postId": "p1", 8 | "title": "t1" 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_delete_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "deletePost": { 4 | "blog": { 5 | "author": { 6 | "createdAt": "2023-06-12T14:52:19.678Z", 7 | "id": "a1", 8 | "updatedAt": "2023-06-12T14:52:19.678Z" 9 | }, 10 | "blogAuthorId": "a1", 11 | "blogId": "b1", 12 | "createdAt": "2023-06-12T14:52:19.863Z", 13 | "name": "name1", 14 | "posts": { 15 | "items": [], 16 | "nextToken": null 17 | }, 18 | "siteId": "s1", 19 | "updatedAt": "2023-06-12T14:52:19.863Z" 20 | }, 21 | "comments": { 22 | "items": [], 23 | "nextToken": null 24 | }, 25 | "createdAt": "2023-06-09T16:22:30.48Z", 26 | "postId": "p1", 27 | "rating": 3.4, 28 | "title": "t1", 29 | "updatedAt": "2023-06-12T14:52:20.122Z" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_list_query.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query ListBlogs($limit: Int) {\n listBlogs(limit: $limit) {\n items {\n author {\n createdAt\n id\n updatedAt\n }\n blogAuthorId\n blogId\n createdAt\n name\n posts {\n items {\n blog {\n blogAuthorId\n blogId\n createdAt\n name\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n nextToken\n }\n siteId\n updatedAt\n }\n nextToken\n }\n}\n", 3 | "variables": { 4 | "limit": 1000 5 | } 6 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_query.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query GetComment($commentId: ID!) {\n getComment(commentId: $commentId) {\n commentId\n content\n createdAt\n post {\n blog {\n blogAuthorId\n blogId\n createdAt\n name\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "commentId": "c1" 5 | } 6 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_query_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "getComment": { 4 | "commentId": "c1", 5 | "content": "content1", 6 | "createdAt": "2023-06-12T14:52:20.378Z", 7 | "post": { 8 | "blog": { 9 | "blogAuthorId": "a1", 10 | "blogId": "b1", 11 | "createdAt": "2023-06-12T14:52:19.863Z", 12 | "name": "name1", 13 | "siteId": "s1", 14 | "updatedAt": "2023-06-12T14:52:19.863Z" 15 | }, 16 | "comments": { 17 | "items": [], 18 | "nextToken": null 19 | }, 20 | "createdAt": "2023-06-09T16:22:30.48Z", 21 | "postId": "p1", 22 | "rating": 3.4, 23 | "title": "t1", 24 | "updatedAt": "2023-06-12T14:52:20.122Z" 25 | }, 26 | "updatedAt": "2023-06-12T14:52:20.378Z" 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_query_with_sk.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query GetBlog($blogId: String!, $siteId: ID!) {\n getBlog(blogId: $blogId, siteId: $siteId) {\n author {\n createdAt\n id\n updatedAt\n }\n blogAuthorId\n blogId\n createdAt\n name\n posts {\n items {\n blog {\n blogAuthorId\n blogId\n createdAt\n name\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n nextToken\n }\n siteId\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "siteId": "s1", 5 | "blogId": "b1" 6 | } 7 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_update.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation UpdateComment($input: UpdateCommentInput!) {\n updateComment(input: $input) {\n commentId\n content\n createdAt\n post {\n blog {\n blogAuthorId\n blogId\n createdAt\n name\n siteId\n updatedAt\n }\n comments {\n items {\n commentId\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n postId\n rating\n title\n updatedAt\n }\n updatedAt\n }\n}\n", 3 | "variables": { 4 | "input": { 5 | "postCommentsPostId": "p1", 6 | "commentId": "c1", 7 | "postCommentsCreatedAt": "2023-06-09T16:22:30.48Z", 8 | "postCommentsRating": 3.4, 9 | "postCommentsTitle": "t1", 10 | "content": "Updated Comment" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_update_remove_association_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "updatePost": { 4 | "blog": null, 5 | "comments": { 6 | "items": [], 7 | "nextToken": null 8 | }, 9 | "createdAt": "2023-06-09T16:22:30.48Z", 10 | "postId": "p1", 11 | "rating": 3.4, 12 | "title": "t1", 13 | "updatedAt": "2023-06-13T14:19:56.122Z" 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/cpk_update_response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "updateComment": { 4 | "commentId": "c1", 5 | "content": "Updated Comment", 6 | "createdAt": "2023-06-13T14:28:27.205Z", 7 | "post": { 8 | "blog": { 9 | "blogAuthorId": "a1", 10 | "blogId": "b1", 11 | "createdAt": "2023-06-13T14:18:32.903Z", 12 | "name": "name1", 13 | "siteId": "s1", 14 | "updatedAt": "2023-06-13T14:18:32.903Z" 15 | }, 16 | "comments": { 17 | "items": [], 18 | "nextToken": null 19 | }, 20 | "createdAt": "2023-06-09T16:22:30.48Z", 21 | "postId": "p1", 22 | "rating": 3.4, 23 | "title": "t1", 24 | "updatedAt": "2023-06-13T14:28:26.761Z" 25 | }, 26 | "updatedAt": "2023-06-13T14:28:27.590Z" 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/create-meeting1.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateMeeting($input: CreateMeetingInput!) { 3 | createMeeting(input: $input) { 4 | date 5 | dateTime 6 | id 7 | name 8 | time 9 | timestamp 10 | } 11 | } 12 | ", 13 | "variables": { 14 | "input": { 15 | "date": "2001-02-03", 16 | "dateTime": "2001-02-03T01:30:15Z", 17 | "name": "meeting1", 18 | "id": "45a5f600-8aa8-41ac-a529-aed75036f5be", 19 | "time": "01:22:33", 20 | "timestamp": 1234567890 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/delete-item.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation DeleteItem($input: DeleteItemInput!) {\n deleteItem(input: $input) { 3 | createdAt 4 | id 5 | name 6 | orderId 7 | status 8 | } 9 | } 10 | ", 11 | "variables": { 12 | "input" : { 13 | "createdAt":"2021-04-20T15:20:32.651Z", 14 | "orderId":"123a7asa", 15 | "status":"IN_TRANSIT" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/delete-person-with-predicate.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation DeletePerson($condition: ModelPersonConditionInput, $input: DeletePersonInput!) { 3 | deletePerson(condition: $condition, input: $input) { 4 | age 5 | createdAt 6 | dob 7 | first_name 8 | id 9 | last_name 10 | relationship 11 | updatedAt 12 | } 13 | } 14 | ", 15 | "variables": { 16 | "input": { 17 | "id": "dfcdac69-0662-41df-a67b-48c62a023f97" 18 | }, 19 | "condition": { 20 | "id": { 21 | "beginsWith": "e6" 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/error-null-message.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "listTodos": null 4 | }, 5 | "errors": [ 6 | { 7 | "path": null, 8 | "data": null, 9 | "errorType": null, 10 | "errorInfo": null, 11 | "locations": null, 12 | "message": null 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/error-null-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "listTodos": null 4 | }, 5 | "errors": [ 6 | { 7 | "path": null, 8 | "data": null, 9 | "errorType": null, 10 | "errorInfo": null, 11 | "locations": null, 12 | "message": "the message" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/lazy_create_no_includes.txt: -------------------------------------------------------------------------------- 1 | {"query": "mutation CreatePost($input: CreatePostInput!) {\n createPost(input: $input) {\n blog {\n id\n }\n createdAt\n id\n name\n updatedAt\n }\n}\n", "variables": {"input":{"blogPostsId":"b1","name":"My Post","id":"p1"}}} -------------------------------------------------------------------------------- /aws-api/src/test/resources/lazy_create_with_includes.txt: -------------------------------------------------------------------------------- 1 | {"query": "mutation CreatePost($input: CreatePostInput!) {\n createPost(input: $input) {\n blog {\n createdAt\n id\n name\n updatedAt\n }\n comments {\n items {\n createdAt\n id\n post {\n id\n }\n text\n updatedAt\n }\n }\n createdAt\n id\n name\n updatedAt\n }\n}\n", "variables": {"input":{"blogPostsId":"b1","name":"My Post","id":"p1"}}} -------------------------------------------------------------------------------- /aws-api/src/test/resources/lazy_query_no_includes.json: -------------------------------------------------------------------------------- 1 | {"query": "query GetPost($id: ID!) {\n getPost(id: $id) {\n blog {\n id\n }\n createdAt\n id\n name\n updatedAt\n }\n}\n", "variables": {"id":"p1"}} -------------------------------------------------------------------------------- /aws-api/src/test/resources/lazy_query_with_includes.json: -------------------------------------------------------------------------------- 1 | {"query": "query GetPost($id: ID!) {\n getPost(id: $id) {\n blog {\n createdAt\n id\n name\n updatedAt\n }\n comments {\n items {\n createdAt\n id\n post {\n id\n }\n text\n updatedAt\n }\n }\n createdAt\n id\n name\n updatedAt\n }\n}\n", "variables": {"id":"p1"}} -------------------------------------------------------------------------------- /aws-api/src/test/resources/multi-gql-zero-rest-api.config: -------------------------------------------------------------------------------- 1 | { 2 | "api1": { 3 | "endpointType": "GraphQL", 4 | "endpoint": "https://www.foo.bar/baz", 5 | "region": "us-east-1", 6 | "authorizationType": "API_KEY", 7 | "apiKey": "SpecialApiKey33" 8 | }, 9 | "api2": { 10 | "endpointType": "GraphQL", 11 | "endpoint": "https://www.foo.bar/baz", 12 | "region": "us-east-1", 13 | "authorizationType": "API_KEY", 14 | "apiKey": "SpecialApiKey33" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/non-json-gql-response.json: -------------------------------------------------------------------------------- 1 | Not a JSON response -------------------------------------------------------------------------------- /aws-api/src/test/resources/null-gql-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "listTodos": null 4 | }, 5 | "errors": null 6 | } 7 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/query-for-person-by-id.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query GetPerson($id: ID!) { 3 | getPerson(id: $id) { 4 | age 5 | createdAt 6 | dob 7 | first_name 8 | id 9 | last_name 10 | relationship 11 | updatedAt 12 | } 13 | } 14 | ", 15 | "variables": { 16 | "id": "9a1bee5c-248f-4746-a7da-58f703ec572d" 17 | } 18 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/query-for-person-by-model-identifier.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query GetPersonWithCPK($age: Int!, $first_name: String!) { 3 | getPersonWithCPK(age: $age, first_name: $first_name) { 4 | age 5 | createdAt 6 | dob 7 | first_name 8 | last_name 9 | relationship 10 | updatedAt 11 | } 12 | } 13 | ", 14 | "variables": { 15 | "age": 50, 16 | "first_name": "First" 17 | } 18 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/query-person-by-predicate.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query ListPersons($filter: ModelPersonFilterInput, $limit: Int) { 3 | listPersons(filter: $filter, limit: $limit) { 4 | items { 5 | age 6 | createdAt 7 | dob 8 | first_name 9 | id 10 | last_name 11 | relationship 12 | updatedAt 13 | } 14 | nextToken 15 | } 16 | } 17 | ", 18 | "variables": { 19 | "filter": { 20 | "id": { 21 | "eq": "aca4a318-181e-445a-beb9-7656f5005c7b" 22 | } 23 | }, 24 | "limit": 1000 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/request-owner-auth.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "subscription OnCreateOwnerAuth($owner: String!) {\n onCreateOwnerAuth(owner: $owner) {\n id\n owner\n title\n }\n}\n", 3 | "variables": { 4 | "owner": "facebook-test-user" 5 | } 6 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | 3 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/single-api.config: -------------------------------------------------------------------------------- 1 | { 2 | "api1": { 3 | "endpointType": "GraphQL", 4 | "endpoint": "https://www.foo.bar/baz", 5 | "region": "us-east-1", 6 | "authorizationType": "API_KEY", 7 | "apiKey": "SpecialApiKey33" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/single-gql-single-rest-api.config: -------------------------------------------------------------------------------- 1 | { 2 | "api1": { 3 | "endpointType": "GraphQL", 4 | "endpoint": "https://www.foo.bar/baz", 5 | "region": "us-east-1", 6 | "authorizationType": "API_KEY", 7 | "apiKey": "SpecialApiKey33" 8 | }, 9 | "api2": { 10 | "endpointType": "REST", 11 | "endpoint": "https://www.foo.bar/baz", 12 | "region": "us-east-1", 13 | "authorizationType": "API_KEY", 14 | "apiKey": "SpecialApiKey33" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/subscription-request-for-on-create.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "subscription OnCreatePerson { 3 | onCreatePerson { 4 | age 5 | createdAt 6 | dob 7 | first_name 8 | id 9 | last_name 10 | relationship 11 | updatedAt 12 | } 13 | } 14 | ", 15 | "variables": null 16 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/update-person-with-predicate.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation UpdatePerson($condition: ModelPersonConditionInput, $input: UpdatePersonInput!) { 3 | updatePerson(condition: $condition, input: $input) { 4 | age 5 | createdAt 6 | dob 7 | first_name 8 | id 9 | last_name 10 | relationship 11 | updatedAt 12 | } 13 | } 14 | ", 15 | "variables": { 16 | "input": { 17 | "id": "dfcdac69-0662-41df-a67b-48c62a023f97", 18 | "first_name": "Tony", 19 | "last_name": "Swanson", 20 | "age": 19, 21 | "dob":"2000-01-15", 22 | "relationship": "single" 23 | }, 24 | "condition": { 25 | "id": { 26 | "beginsWith": "e6" 27 | } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /aws-api/src/test/resources/websocket-connection_ack.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "connection_ack", 3 | "payload": { 4 | "connectionTimeoutMs":300000 5 | } 6 | } 7 | 8 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/websocket-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "data", 3 | "id": "7bb8404c-fd21-42e7-a30d-0a5c38ff55b7", 4 | "payload": { 5 | "data": { 6 | "subscribeToEventComments": { 7 | "__typename": "Comment", 8 | "commentId": "c398d748-8ce2-4331-acd6-93fe19eedad5", 9 | "content": "Might be late though!", 10 | "createdAt": "Mon Nov 11 16:08:15 PST 2019", 11 | "eventId": "e9819958-e8da-4f68-84f0-65b2f775dbf7" 12 | } 13 | } 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/websocket-ka.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ka" 3 | } 4 | 5 | -------------------------------------------------------------------------------- /aws-api/src/test/resources/websocket-start_ack.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "start_ack", 3 | "id": "7bb8404c-fd21-42e7-a30d-0a5c38ff55b7" 4 | } 5 | 6 | -------------------------------------------------------------------------------- /aws-auth-cognito/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-auth-cognito/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | # CredentialManager rules 2 | -if class androidx.credentials.CredentialManager 3 | -keep class androidx.credentials.playservices.** { 4 | *; 5 | } -------------------------------------------------------------------------------- /aws-auth-cognito/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-auth-cognito 2 | POM_NAME=Amplify Framework for Android - Auth 3 | POM_DESCRIPTION=Amplify Framework for Android - Auth Plugin for Amazon Cognito 4 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /aws-auth-cognito/src/androidTest/assets/create-mfa-subscription.graphql: -------------------------------------------------------------------------------- 1 | subscription OnCreateMfaInfo { 2 | onCreateMfaInfo { 3 | username 4 | code 5 | expirationTime 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/helpers/AuthFactorTypeHelper.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.auth.cognito.helpers 17 | 18 | import com.amplifyframework.auth.AuthFactorType 19 | 20 | internal fun String.toAuthFactorTypeOrNull() = AuthFactorType.entries.firstOrNull { it.challengeResponse == this } 21 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/Builder.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine 17 | 18 | internal interface Builder { 19 | fun build(): T 20 | } 21 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/EffectExecutor.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine 17 | 18 | internal interface EffectExecutor { 19 | fun execute(actions: List, eventDispatcher: EventDispatcher, environment: Environment) 20 | } 21 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/Environment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine 17 | 18 | /** 19 | * Environments provide a way to access dependencies at runtime. 20 | */ 21 | internal interface Environment 22 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/EventDispatcher.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine 17 | 18 | internal interface EventDispatcher { 19 | fun send(event: StateMachineEvent) 20 | } 21 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/StateResolution.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine 17 | 18 | internal class StateResolution(val newState: T, val actions: List = listOf()) { 19 | companion object { 20 | fun from(_state: T): StateResolution = StateResolution(_state) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/codegen/actions/DeleteUserActions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine.codegen.actions 17 | 18 | import com.amplifyframework.statemachine.Action 19 | 20 | internal interface DeleteUserActions { 21 | fun initDeleteUserAction(accessToken: String): Action 22 | fun initiateSignOut(): Action 23 | } 24 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/codegen/data/GlobalSignOutErrorData.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine.codegen.data 17 | 18 | internal data class GlobalSignOutErrorData(val accessToken: String?, val error: Exception) 19 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/codegen/data/HostedUIErrorData.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine.codegen.data 17 | 18 | internal data class HostedUIErrorData(val url: String?, val error: Exception) 19 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/codegen/data/HostedUIProviderInfo.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine.codegen.data 17 | 18 | import com.amplifyframework.auth.AuthProvider 19 | 20 | internal data class HostedUIProviderInfo( 21 | val authProvider: AuthProvider? = null, 22 | val idpIdentifier: String? = null 23 | ) 24 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/codegen/data/RevokeTokenErrorData.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine.codegen.data 17 | 18 | internal data class RevokeTokenErrorData(val refreshToken: String?, val error: Exception) 19 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/main/java/com/amplifyframework/statemachine/codegen/errors/CredentialStoreError.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.statemachine.codegen.errors 17 | 18 | internal data class CredentialStoreError( 19 | override val message: String, 20 | override val cause: Throwable? = null 21 | ) : Exception() 22 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/java/android/util/Base64.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package android.util 17 | 18 | object Base64 { 19 | @JvmStatic 20 | fun encodeToString(input: ByteArray?, flags: Int): String = java.util.Base64.getEncoder().encodeToString(input) 21 | 22 | @JvmStatic 23 | fun decode(str: String?, flags: Int): ByteArray = java.util.Base64.getDecoder().decode(str) 24 | } 25 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/java/featureTest/utilities/TimeZoneRule.kt: -------------------------------------------------------------------------------- 1 | package featureTest.utilities 2 | 3 | import java.util.TimeZone 4 | import org.junit.rules.TestWatcher 5 | import org.junit.runner.Description 6 | 7 | class TimeZoneRule(private val timeZone: TimeZone) : TestWatcher() { 8 | private val previous: TimeZone = TimeZone.getDefault() 9 | 10 | override fun starting(description: Description) { 11 | TimeZone.setDefault(timeZone) 12 | } 13 | 14 | override fun finished(description: Description) { 15 | TimeZone.setDefault(previous) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/resources/feature-test/states/SignedOut_Configured.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "AuthState.Configured", 3 | "AuthenticationState": { 4 | "type": "AuthenticationState.SignedOut", 5 | "signedOutData": { 6 | "lastKnownUsername": "username" 7 | } 8 | }, 9 | "AuthorizationState": { 10 | "type": "AuthorizationState.Configured" 11 | }, 12 | "SignUpState": { 13 | "type": "SignUpState.NotStarted" 14 | } 15 | } -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/resources/feature-test/states/SignedOut_Configured_AwaitingUserConfirmation.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "AuthState.Configured", 3 | "AuthenticationState": { 4 | "type": "AuthenticationState.SignedOut", 5 | "signedOutData": { 6 | "lastKnownUsername": "username" 7 | } 8 | }, 9 | "AuthorizationState": { 10 | "type": "AuthorizationState.Configured" 11 | }, 12 | "SignUpState": { 13 | "type": "SignUpState.AwaitingUserConfirmation", 14 | "signUpData": { 15 | "username": "username", 16 | "session": "session-id", 17 | "userId": "" 18 | }, 19 | "signUpResult": "{\"isSignUpComplete\":false,\"nextStep\":{\"signUpStep\":\"CONFIRM_SIGN_UP_STEP\",\"additionalInfo\":{},\"codeDeliveryDetails\":{\"destination\":\"user@domain.com\",\"deliveryMedium\":\"EMAIL\",\"attributeName\":\"attributeName\"}},\"userId\":\"\"}" 20 | } 21 | } -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/resources/feature-test/testsuites/signOut/Test_that_signOut_while_already_signed_out_returns_complete_with_success.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Test that signOut while already signed out returns complete with success", 3 | "preConditions": { 4 | "amplify-configuration": "authconfiguration.json", 5 | "state": "SignedOut_Configured.json", 6 | "mockedResponses": [ 7 | ] 8 | }, 9 | "api": { 10 | "name": "signOut", 11 | "params": { 12 | }, 13 | "options": { 14 | "globalSignOut": false 15 | } 16 | }, 17 | "validations": [ 18 | { 19 | "type": "amplify", 20 | "apiName": "signOut", 21 | "responseType": "complete", 22 | "response": { 23 | } 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /aws-auth-cognito/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | -------------------------------------------------------------------------------- /aws-auth-plugins-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-auth-plugins-core/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-auth-plugins-core 2 | POM_NAME=Amplify Framework for Android - AWS Auth Plugins Core 3 | POM_DESCRIPTION=Amplify Framework for Android - Auth Plugins Core components and utilities for 3rd Party Plugin Development 4 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /aws-auth-plugins-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-auth-plugins-core/src/main/java/com/amplifyframework/auth/plugins/core/data/AWSCognitoIdentityPoolConfiguration.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.auth.plugins.core.data 17 | 18 | /** 19 | * Configuration options for specifying cognito identity pool. 20 | */ 21 | data class AWSCognitoIdentityPoolConfiguration(val poolId: String, val region: String = "us-east-1") 22 | -------------------------------------------------------------------------------- /aws-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-core/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-core 2 | POM_NAME=Amplify Framework for Android - AWS Core 3 | POM_DESCRIPTION=Amplify Framework for Android - AWS Core components and utilities for AWS Amplify Libraries 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-core/src/main/java/com/amplifyframework/auth/AWSCognitoAuthMetadataType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.auth 16 | 17 | import com.amplifyframework.annotations.InternalAmplifyApi 18 | 19 | @InternalAmplifyApi 20 | enum class AWSCognitoAuthMetadataType(val key: String) { 21 | Authenticator("authenticator"), 22 | AuthPluginsCore("oidc-auth-plugin") 23 | } 24 | -------------------------------------------------------------------------------- /aws-datastore/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-datastore/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-datastore 2 | POM_NAME=Amplify Framework for Android - DataStore 3 | POM_DESCRIPTION=Amplify Framework for Android - DataStore Plugin 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-datastore/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /aws-datastore/src/androidTest/assets/schema-drift-mutation.graphql: -------------------------------------------------------------------------------- 1 | mutation MyMutation { 2 | createSchemaDrift(input: {enumValue: THREE}) { 3 | _deleted 4 | _lastChangedAt 5 | _version 6 | createdAt 7 | enumValue 8 | updatedAt 9 | id 10 | } 11 | } -------------------------------------------------------------------------------- /aws-datastore/src/androidTest/assets/schemas/phonecall/person.json: -------------------------------------------------------------------------------- 1 | { 2 | "authRules": [], 3 | "fields": { 4 | "id": { 5 | "authRules": [], 6 | "isArray": false, 7 | "isEnum": false, 8 | "isModel": false, 9 | "isRequired": true, 10 | "javaClassForValue": "java.lang.String", 11 | "name": "id", 12 | "targetType": "ID" 13 | }, 14 | "name": { 15 | "authRules": [], 16 | "isArray": false, 17 | "isEnum": false, 18 | "isModel": false, 19 | "isRequired": true, 20 | "javaClassForValue": "java.lang.String", 21 | "name": "name", 22 | "targetType": "String" 23 | } 24 | }, 25 | "indexes": {}, 26 | "modelClass": "com.amplifyframework.core.model.SerializedModel", 27 | "name": "Person", 28 | "pluralName": "People" 29 | } 30 | -------------------------------------------------------------------------------- /aws-datastore/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /aws-datastore/src/main/java/com/amplifyframework/datastore/DataStoreErrorHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.datastore; 17 | 18 | import com.amplifyframework.core.Consumer; 19 | 20 | /** 21 | * Just a ~type-alias for a consumer of DataStoreException. 22 | */ 23 | public interface DataStoreErrorHandler extends Consumer {} 24 | -------------------------------------------------------------------------------- /aws-datastore/src/main/java/com/amplifyframework/datastore/extensions/ModelExtensions.kt: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.extensions 2 | 3 | import com.amplifyframework.core.model.Model 4 | 5 | /** 6 | * This method returns the primary key that was used on the ModelMetadata table for the given model. 7 | * The returned value should only be used to construct the lookup sqlite key, and is not a value used by AppSync 8 | * @return the primary key that was used on the ModelMetadata table for the given model 9 | */ 10 | internal fun Model.getMetadataSQLitePrimaryKey() = "$modelName|$primaryKeyString" 11 | -------------------------------------------------------------------------------- /aws-datastore/src/main/java/com/amplifyframework/datastore/storage/sqlite/TransactionBlock.kt: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.datastore.storage.sqlite 2 | 3 | import com.amplifyframework.datastore.DataStoreException 4 | 5 | fun interface TransactionBlock { 6 | /** 7 | * Call to begin the block. 8 | */ 9 | @Throws(DataStoreException::class) 10 | fun run() 11 | } 12 | -------------------------------------------------------------------------------- /aws-datastore/src/main/java/com/amplifyframework/datastore/storage/sqlite/migrations/ModelMigration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.datastore.storage.sqlite.migrations; 17 | 18 | /** 19 | * Interface that defines the contract of an in-place model migration. 20 | */ 21 | public interface ModelMigration { 22 | /** 23 | * Apply the migration. 24 | */ 25 | void apply(); 26 | } 27 | -------------------------------------------------------------------------------- /aws-datastore/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /aws-datastore/src/test/java/com/amplifyframework/datastore/syncengine/TestSchedulerProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.datastore.syncengine 17 | 18 | import io.reactivex.rxjava3.schedulers.TestScheduler 19 | 20 | class TestSchedulerProvider(private val scheduler: TestScheduler) : SchedulerProvider { 21 | override fun computation() = scheduler 22 | override fun io() = scheduler 23 | } 24 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/base-sync-request-document-for-blog-owner.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query SyncBlogOwners { 3 | syncBlogOwners { 4 | items { 5 | __typename 6 | _deleted 7 | _lastChangedAt 8 | _version 9 | blog { 10 | items { 11 | __typename 12 | _deleted 13 | _lastChangedAt 14 | _version 15 | createdAt 16 | id 17 | name 18 | updatedAt 19 | } 20 | nextToken 21 | startedAt 22 | } 23 | createdAt 24 | id 25 | name 26 | updatedAt 27 | wea 28 | } 29 | nextToken 30 | startedAt 31 | } 32 | } 33 | ", 34 | "variables": null 35 | } 36 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/base-sync-request-document-for-parent.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query SyncParents { 3 | syncParents { 4 | items { 5 | __typename 6 | _deleted 7 | _lastChangedAt 8 | _version 9 | address { 10 | city 11 | country 12 | phonenumber { 13 | carrier 14 | code 15 | number 16 | } 17 | street 18 | street2 19 | } 20 | children { 21 | address { 22 | city 23 | country 24 | phonenumber { 25 | carrier 26 | code 27 | number 28 | } 29 | street 30 | street2 31 | } 32 | name 33 | } 34 | id 35 | name 36 | } 37 | nextToken 38 | startedAt 39 | } 40 | } 41 | ", 42 | "variables": null 43 | } 44 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/base-sync-request-paginating-blog-owners.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query SyncBlogOwners($limit: Int) { 3 | syncBlogOwners(limit: $limit) { 4 | items { 5 | __typename 6 | _deleted 7 | _lastChangedAt 8 | _version 9 | blog { 10 | items { 11 | __typename 12 | _deleted 13 | _lastChangedAt 14 | _version 15 | createdAt 16 | id 17 | name 18 | updatedAt 19 | } 20 | nextToken 21 | startedAt 22 | } 23 | createdAt 24 | id 25 | name 26 | updatedAt 27 | wea 28 | } 29 | nextToken 30 | startedAt 31 | } 32 | } 33 | ", 34 | "variables": { 35 | "limit": 1000 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/base-sync-request-with-predicate-match-none.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query SyncBlogOwners($filter: ModelBlogOwnerFilterInput) { 3 | syncBlogOwners(filter: $filter) { 4 | items { 5 | __typename 6 | _deleted 7 | _lastChangedAt 8 | _version 9 | blog { 10 | __typename 11 | _deleted 12 | _lastChangedAt 13 | _version 14 | createdAt 15 | id 16 | name 17 | } 18 | createdAt 19 | id 20 | name 21 | updatedAt 22 | wea 23 | } 24 | nextToken 25 | startedAt 26 | } 27 | } 28 | ", 29 | "variables": { 30 | "filter": { 31 | "and": [ 32 | { 33 | "id": { 34 | "eq" : null 35 | } 36 | } 37 | ] 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/base-sync-request-with-predicate-operation.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query SyncBlogOwners($filter: ModelBlogOwnerFilterInput) { 3 | syncBlogOwners(filter: $filter) { 4 | items { 5 | __typename 6 | _deleted 7 | _lastChangedAt 8 | _version 9 | blog { 10 | items { 11 | __typename 12 | _deleted 13 | _lastChangedAt 14 | _version 15 | createdAt 16 | id 17 | name 18 | updatedAt 19 | } 20 | nextToken 21 | startedAt 22 | } 23 | createdAt 24 | id 25 | name 26 | updatedAt 27 | wea 28 | } 29 | nextToken 30 | startedAt 31 | } 32 | } 33 | ", 34 | "variables": { 35 | "filter": { 36 | "and": [ 37 | { 38 | "id": { 39 | "eq" : "426f8e8d-ea0f-4839-a73f-6a2a38565ba1" 40 | } 41 | } 42 | ] 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/conflict-unhandled-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "updateNote": null 4 | }, 5 | "errors": [ 6 | { 7 | "path": [ 8 | "updateNote" 9 | ], 10 | "data": { 11 | "id": "KoolId22", 12 | "content": "Resurecting the dataz", 13 | "_version": 7, 14 | "_deleted": true, 15 | "_lastChangedAt": 1601499066604 16 | }, 17 | "errorType": "ConflictUnhandled", 18 | "errorInfo": null, 19 | "locations": [ 20 | { 21 | "line": 2, 22 | "column": 3, 23 | "sourceName": null 24 | } 25 | ], 26 | "message": "Conflict resolver rejects mutation." 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/create-blog2.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateBlog2($input: CreateBlog2Input!) { 3 | createBlog2(input: $input) { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | createdAt 9 | id 10 | name 11 | owner { 12 | name 13 | } 14 | updatedAt 15 | } 16 | } 17 | ", 18 | "variables": { 19 | "input": { 20 | "name" : "My Other Blog", 21 | "otherBlogOwner2Name" : "Stanley", 22 | "createdAt" : null, 23 | "id": "5a90f4dc-2dd7-49bd-85f8-d45119c30790" 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/create-comment-request.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateComment($input: CreateCommentInput!) { 3 | createComment(input: $input) { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | content 9 | createdAt 10 | id 11 | post { 12 | id 13 | } 14 | updatedAt 15 | } 16 | } 17 | ", 18 | "variables": { 19 | "input": { 20 | "postCommentsId" : "9a4295d6-8225-495a-a531-beffc8b7ae7d", 21 | "content" : "toast", 22 | "createdAt" : null, 23 | "id": "426f8e8d-ea0f-4839-a73f-6a2a38565ba1" 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/create-other-blog.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation CreateOtherBlog($input: CreateOtherBlogInput!) { 3 | createOtherBlog(input: $input) { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | createdAt 9 | id 10 | name 11 | owner { 12 | name 13 | wea 14 | } 15 | updatedAt 16 | } 17 | } 18 | ", 19 | "variables": { 20 | "input": { 21 | "name" : "My Other Blog", 22 | "otherBlogOwnerName" : "Stanley", 23 | "otherBlogOwnerWea" : "WEA", 24 | "createdAt" : null, 25 | "id": "5a90f4dc-2dd7-49bd-85f8-d45119c30790" 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/delete-item.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation DeleteItem($input: DeleteItemInput!) {\n deleteItem(input: $input) { 3 | __typename 4 | _deleted 5 | _lastChangedAt 6 | _version 7 | createdAt 8 | id 9 | name 10 | orderId 11 | status 12 | } 13 | } 14 | ", 15 | "variables": { 16 | "input" : { 17 | "createdAt":"2021-04-20T15:20:32.651Z", 18 | "orderId":"123a7asa", 19 | "_version":1, 20 | "status":"IN_TRANSIT" 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/delete-person-with-predicate.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation DeletePerson($condition: ModelPersonConditionInput, $input: DeletePersonInput!) { 3 | deletePerson(condition: $condition, input: $input) { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | age 9 | createdAt 10 | dob 11 | first_name 12 | id 13 | last_name 14 | relationship 15 | updatedAt 16 | } 17 | } 18 | ", 19 | "variables": { 20 | "condition": { 21 | "age":{ 22 | "gt":40 23 | } 24 | }, 25 | "input" : { 26 | "_version" : 456, 27 | "id" : "17521540-ccaa-4357-a622-34c42d8cfa24" 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/meeting-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "date": "2001-02-03", 3 | "dateTime": "2001-02-03T01:30:00Z", 4 | "id": "45a5f600-8aa8-41ac-a529-aed75036f5be", 5 | "name": "meeting0", 6 | "time": "01:22:00", 7 | "timestamp": 1234567890, 8 | "_deleted": false, 9 | "_version": 42, 10 | "_lastChangedAt": 1594858827 11 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/on-create-request-for-blog.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "subscription OnCreateBlog { 3 | onCreateBlog { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | createdAt 9 | id 10 | name 11 | owner { 12 | id 13 | } 14 | posts { 15 | items { 16 | id 17 | } 18 | nextToken 19 | startedAt 20 | } 21 | updatedAt 22 | } 23 | } 24 | ", 25 | "variables": null 26 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/on-create-request-for-parent.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "subscription OnCreateParent { 3 | onCreateParent { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | address { 9 | city 10 | country 11 | phonenumber { 12 | carrier 13 | code 14 | number 15 | } 16 | street 17 | street2 18 | } 19 | children { 20 | address { 21 | city 22 | country 23 | phonenumber { 24 | carrier 25 | code 26 | number 27 | } 28 | street 29 | street2 30 | } 31 | name 32 | } 33 | id 34 | name 35 | } 36 | } 37 | ", 38 | "variables": null 39 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/on-delete-request-for-blog-owner.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "subscription OnDeleteBlogOwner { 3 | onDeleteBlogOwner { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | blog { 9 | items { 10 | id 11 | } 12 | nextToken 13 | startedAt 14 | } 15 | createdAt 16 | id 17 | name 18 | updatedAt 19 | wea 20 | } 21 | } 22 | ", 23 | "variables": null 24 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/on-update-request-for-post.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "subscription OnUpdatePost { 3 | onUpdatePost { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | author { 9 | id 10 | } 11 | blog { 12 | id 13 | } 14 | comments { 15 | items { 16 | id 17 | } 18 | nextToken 19 | startedAt 20 | } 21 | createdAt 22 | id 23 | rating 24 | status 25 | title 26 | updatedAt 27 | } 28 | } 29 | ", 30 | "variables": null 31 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | 3 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/update-blog-owner-only-changed-fields.txt: -------------------------------------------------------------------------------- 1 | {"query": "mutation UpdateBlogOwner($input: UpdateBlogOwnerInput!) { 2 | updateBlogOwner(input: $input) { 3 | __typename 4 | _deleted 5 | _lastChangedAt 6 | _version 7 | blog { 8 | items { 9 | id 10 | } 11 | nextToken 12 | startedAt 13 | } 14 | createdAt 15 | id 16 | name 17 | updatedAt 18 | wea 19 | } 20 | } 21 | ", 22 | "variables": { 23 | "input":{ 24 | "name":"John Smith", 25 | "id":"5aef1282-64d6-4fa8-ba2c-290f9d9c6973", 26 | "_version":1 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/update-blog-owner-with-predicate.txt: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation UpdateBlogOwner($condition: ModelBlogOwnerConditionInput, $input: UpdateBlogOwnerInput!) { 3 | updateBlogOwner(condition: $condition, input: $input) { 4 | __typename 5 | _deleted 6 | _lastChangedAt 7 | _version 8 | blog { 9 | items { 10 | id 11 | } 12 | nextToken 13 | startedAt 14 | } 15 | createdAt 16 | id 17 | name 18 | updatedAt 19 | wea 20 | } 21 | } 22 | ", 23 | "variables": { 24 | "condition": { 25 | "wea":{ 26 | "contains":"ther" 27 | } 28 | }, 29 | "input": { 30 | "_version" : 42, 31 | "id" : "926d7ee8-4ea5-40c0-8e62-3fb80b2a2edd", 32 | "name" : "John Doe", 33 | "createdAt" : null, 34 | "wea" : null 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/update-meeting.txt: -------------------------------------------------------------------------------- 1 | {"query":"mutation UpdateMeeting($input: UpdateMeetingInput!) { 2 | updateMeeting(input: $input) { 3 | __typename 4 | _deleted 5 | _lastChangedAt 6 | _version 7 | date 8 | dateTime 9 | id 10 | name 11 | time 12 | timestamp 13 | } 14 | } 15 | ", 16 | "variables": { 17 | "input": { 18 | "date": "2001-02-03", 19 | "dateTime": "2001-02-03T01:30:15Z", 20 | "name": "meeting1", 21 | "id": "45a5f600-8aa8-41ac-a529-aed75036f5be", 22 | "time": "01:22:33", 23 | "timestamp": 1234567890, 24 | "_version": 1 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /aws-datastore/src/test/resources/update-nested-serialized-model-custom-type.txt: -------------------------------------------------------------------------------- 1 | {"query": "mutation UpdatePerson($input: UpdatePersonInput!) { 2 | updatePerson(input: $input) { 3 | __typename 4 | _deleted 5 | _lastChangedAt 6 | _version 7 | bio { 8 | email 9 | phone { 10 | area 11 | country 12 | number 13 | } 14 | } 15 | id 16 | mailingAddresses { 17 | city 18 | line1 19 | line2 20 | postalCode 21 | state 22 | } 23 | name 24 | } 25 | } 26 | ", 27 | "variables": { 28 | "input": { 29 | "bio": { 30 | "phone": { "area": "415", "country": "+1", "number": "6666666" }, 31 | "email": "test@testing.com" 32 | }, 33 | "id": "123456", 34 | "_version": 1 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /aws-geo-location/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-geo-location/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-geo-location 2 | POM_NAME=Amplify Framework for Android - Geo 3 | POM_DESCRIPTION=Amplify Framework for Android - Geo Plugin for Amazon Location Service 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-geo-location/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-geo-location/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | -------------------------------------------------------------------------------- /aws-logging-cloudwatch/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-logging-cloudwatch/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-logging-cloudwatch 2 | POM_NAME=Amplify Framework for Android - Logging 3 | POM_DESCRIPTION=Amplify Framework for Android - Logging Plugin for Amazon CloudWatch 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-logging-cloudwatch/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /aws-logging-cloudwatch/src/main/java/com/amplifyframework/logging/cloudwatch/db/LogEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.logging.cloudwatch.db 16 | 17 | internal data class LogEvent(val timestamp: Long, val message: String, val id: Long) 18 | -------------------------------------------------------------------------------- /aws-logging-cloudwatch/src/main/java/com/amplifyframework/logging/cloudwatch/models/CloudWatchLogEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.logging.cloudwatch.models 16 | 17 | internal data class CloudWatchLogEvent(val timestamp: Long, val message: String) 18 | -------------------------------------------------------------------------------- /aws-pinpoint-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-pinpoint-core/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-pinpoint-core 2 | POM_NAME=Amplify Framework for Android - Pinpoint Core 3 | POM_DESCRIPTION=Amplify Framework for Android - Shared Core Implementation for Amazon Pinpoint 4 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /aws-pinpoint-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-pinpoint-core/src/main/java/com/amplifyframework/pinpoint/core/models/AWSPinpointUserProfileBehavior.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.pinpoint.core.models 17 | 18 | import com.amplifyframework.analytics.AnalyticsProperties 19 | 20 | interface AWSPinpointUserProfileBehavior { 21 | val userAttributes: AnalyticsProperties? 22 | } 23 | -------------------------------------------------------------------------------- /aws-predictions-tensorflow/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-predictions-tensorflow/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-predictions-tensorflow 2 | POM_NAME=Amplify Framework for Android - Offline Predictions from TensorFlow Lite 3 | POM_DESCRIPTION=Amplify Framework for Android - Offline Predictions Plugin 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-predictions-tensorflow/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-predictions-tensorflow/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /aws-predictions-tensorflow/src/test/resources/word-tokens.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 1 3 | 2 4 | 3 5 | the 4 6 | and 5 7 | a 6 8 | of 7 9 | to 8 10 | is 9 11 | -------------------------------------------------------------------------------- /aws-predictions/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-predictions/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-predictions 2 | POM_NAME=Amplify Framework for Android - Predictions using AWS 3 | POM_DESCRIPTION=Amplify Framework for Android - Predictions Plugin for AWS 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/jeff_bezos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/aws-predictions/src/androidTest/assets/jeff_bezos.jpg -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/negative-review.txt: -------------------------------------------------------------------------------- 1 | I hate spaghetti. -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/positive-review.txt: -------------------------------------------------------------------------------- 1 | I love spaghetti. -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/sample-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/aws-predictions/src/androidTest/assets/sample-form.png -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/sample-table-expected-text.txt: -------------------------------------------------------------------------------- 1 | Amazon Textract can extract tables and the cells in a table. For example, when the following table is detected on a form, Amazon Textract detects a table with four cells. Name Address Ana Carolina 123 Any Town 2 | -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/sample-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/aws-predictions/src/androidTest/assets/sample-table.png -------------------------------------------------------------------------------- /aws-predictions/src/androidTest/assets/sample-text-fr.txt: -------------------------------------------------------------------------------- 1 | Les grandes personnes m'ont conseillé de laisser de côté les dessins de serpents boas ouverts ou fermés, et de m'intéresser plutôt à la géographie, à l'histoire, au calcul et à la grammaire. C'est ainsi que j'ai abandonné, à l'âge de six ans, une magnifique carrière de peinture. -------------------------------------------------------------------------------- /aws-predictions/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /aws-predictions/src/main/java/com/amplifyframework/predictions/aws/models/ColorChallengeType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.predictions.aws.models 17 | 18 | import com.amplifyframework.annotations.InternalAmplifyApi 19 | 20 | @InternalAmplifyApi 21 | enum class ColorChallengeType { 22 | SEQUENTIAL 23 | } 24 | -------------------------------------------------------------------------------- /aws-predictions/src/main/java/com/amplifyframework/predictions/aws/models/RgbColor.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.predictions.aws.models 17 | 18 | import com.amplifyframework.annotations.InternalAmplifyApi 19 | 20 | @InternalAmplifyApi 21 | data class RgbColor(val red: Int, val green: Int, val blue: Int) 22 | -------------------------------------------------------------------------------- /aws-predictions/src/main/java/com/amplifyframework/predictions/aws/models/liveness/DisconnectionEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.predictions.aws.models.liveness 16 | 17 | import kotlinx.serialization.SerialName 18 | import kotlinx.serialization.Serializable 19 | 20 | @Serializable 21 | internal data class DisconnectionEvent( 22 | @SerialName("TimestampMillis") val timestampMillis: Long 23 | ) 24 | -------------------------------------------------------------------------------- /aws-predictions/src/main/java/com/amplifyframework/predictions/aws/models/liveness/FreshnessColor.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.predictions.aws.models.liveness 16 | 17 | import kotlinx.serialization.SerialName 18 | 19 | @kotlinx.serialization.Serializable 20 | internal data class FreshnessColor(@SerialName("RGB") val rGB: List) 21 | -------------------------------------------------------------------------------- /aws-predictions/src/main/java/com/amplifyframework/predictions/aws/models/liveness/LightChallengeType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.predictions.aws.models.liveness 16 | 17 | /** 18 | * Light Challenge Type 19 | */ 20 | internal enum class LightChallengeType { 21 | SEQUENTIAL 22 | } 23 | -------------------------------------------------------------------------------- /aws-predictions/src/main/java/com/amplifyframework/predictions/aws/models/liveness/SessionInformation.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.predictions.aws.models.liveness 16 | 17 | import kotlinx.serialization.SerialName 18 | import kotlinx.serialization.Serializable 19 | 20 | @Serializable 21 | internal data class SessionInformation( 22 | @SerialName("Challenge") val challenge: ServerChallenge 23 | ) 24 | -------------------------------------------------------------------------------- /aws-predictions/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-identify-entities.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-1", 3 | "identify": { 4 | "identifyEntities": { 5 | "maxEntities": "0", 6 | "celebrityDetectionEnabled": "true", 7 | "region": "us-west-2", 8 | "defaultNetworkPolicy": "auto" 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-identify-entity-matches.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-1", 3 | "identify": { 4 | "identifyEntities": { 5 | "maxEntities": "10", 6 | "celebrityDetectionEnabled": "false", 7 | "region": "us-west-2", 8 | "defaultNetworkPolicy": "auto", 9 | "collectionId": "some-collection-id" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-identify-labels.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-1", 3 | "identify": { 4 | "identifyLabels": { 5 | "region": "us-west-2", 6 | "type": "LABELS", 7 | "defaultNetworkPolicy": "auto" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-identify-text.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-1", 3 | "identify": { 4 | "identifyText": { 5 | "format": "ALL", 6 | "region": "us-west-2", 7 | "defaultNetworkPolicy": "auto" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-interpret.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-east-1", 3 | "interpret": { 4 | "interpretText": { 5 | "region": "us-west-2", 6 | "type": "SENTIMENT", 7 | "defaultNetworkPolicy": "offline" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-region.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-2" 3 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-text-to-speech.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-1", 3 | "convert": { 4 | "speechGenerator": { 5 | "voice": "Aditi", 6 | "language": "en-IN", 7 | "region": "us-west-2", 8 | "defaultNetworkPolicy": "auto" 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-with-translate.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultRegion": "us-west-1", 3 | "convert": { 4 | "translateText": { 5 | "targetLang": "ko", 6 | "sourceLang": "en", 7 | "region": "us-west-2", 8 | "defaultNetworkPolicy": "auto" 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/configuration-without-region.json: -------------------------------------------------------------------------------- 1 | { 2 | "interpret": { 3 | "__defaultRegion": "defaultRegion is missing in this JSON.", 4 | "interpretText": { 5 | "region": "us-west-2", 6 | "type": "ALL", 7 | "defaultNetworkPolicy": "auto" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /aws-predictions/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | -------------------------------------------------------------------------------- /aws-push-notifications-pinpoint-common/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-push-notifications-pinpoint-common/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-push-notifications-pinpoint-common 2 | POM_NAME=Amplify Framework for Android - Push Notifications Utilities 3 | POM_DESCRIPTION=Amplify Framework for Android - Push Notifications Utilties for Amazon Pinpoint 4 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /aws-push-notifications-pinpoint/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /aws-push-notifications-pinpoint/README.md: -------------------------------------------------------------------------------- 1 | # Setup Push Notifications 2 | 3 | 1. Follow the instructions to setup an Android project: https://docs.amplify.aws/lib/project-setup/create-application/q/platform/android/ 4 | 2. Add Firebase to the project by following the section "Set up your Backend": https://docs.amplify.aws/sdk/push-notifications/getting-started/q/platform/android/#set-up-your-backend 5 | 3. Add push notifications dependency and plugin to your project. 6 | 7 | ```groovy 8 | implementation project(':aws-push-notifications-pinpoint') 9 | ``` 10 | 11 | ```kotlin 12 | Amplify.addPlugin(AWSPinpointPushNotificationsPlugin()) 13 | ``` 14 | 15 | 4. Run the app and send test message from pinpoint console. Refer https://docs.aws.amazon.com/pinpoint/latest/userguide/messages-mobile.html -------------------------------------------------------------------------------- /aws-push-notifications-pinpoint/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-push-notifications-pinpoint 2 | POM_NAME=Amplify Framework for Android - Push Notifications 3 | POM_DESCRIPTION=Amplify Framework for Android - Push Notifications Plugin for Amazon Pinpoint 4 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /aws-storage-s3/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /aws-storage-s3/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=aws-storage-s3 2 | POM_NAME=Amplify Framework for Android - Storage 3 | POM_DESCRIPTION=Amplify Framework for Android - Storage Plugin for Amazon S3 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /aws-storage-s3/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/request/AWSS3StoragePathRemoveRequest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.storage.s3.request 16 | 17 | import com.amplifyframework.storage.StoragePath 18 | 19 | /** 20 | * Parameters to provide to S3 that describe a request to remove a file 21 | */ 22 | internal data class AWSS3StoragePathRemoveRequest( 23 | val path: StoragePath 24 | ) 25 | -------------------------------------------------------------------------------- /aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/transfer/StorageTransferClientProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.storage.s3.transfer 16 | 17 | import aws.sdk.kotlin.services.s3.S3Client 18 | 19 | internal interface StorageTransferClientProvider { 20 | fun getStorageTransferClient(region: String?, bucketName: String?): S3Client 21 | } 22 | -------------------------------------------------------------------------------- /aws-storage-s3/src/test/java/com/amplifyframework/storage/s3/transfer/TransferDBTest.kt: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.storage.s3.transfer 2 | 3 | import io.kotest.matchers.types.shouldBeSameInstanceAs 4 | import org.junit.After 5 | import org.junit.Test 6 | import org.junit.runner.RunWith 7 | import org.robolectric.RobolectricTestRunner 8 | import org.robolectric.RuntimeEnvironment 9 | 10 | @RunWith(RobolectricTestRunner::class) 11 | class TransferDBTest { 12 | 13 | @After 14 | fun teardown() { 15 | // Clear instance 16 | TransferDB.instance = null 17 | } 18 | 19 | @Test 20 | fun `getInstance returns the same object`() { 21 | val context = RuntimeEnvironment.getApplication() 22 | 23 | val db1 = TransferDB.getInstance(context) 24 | val db2 = TransferDB.getInstance(context) 25 | 26 | db1 shouldBeSameInstanceAs db2 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /aws-storage-s3/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | -------------------------------------------------------------------------------- /canaries/example/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/ 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | local.properties 11 | 12 | #amplify-do-not-edit-begin 13 | amplify/\#current-cloud-backend 14 | amplify/.config/local-* 15 | amplify/logs 16 | amplify/mock-data 17 | amplify/backend/amplify-meta.json 18 | amplify/backend/.temp 19 | build/ 20 | dist/ 21 | node_modules/ 22 | aws-exports.js 23 | awsconfiguration.json 24 | amplifyconfiguration.json 25 | amplifyconfiguration.dart 26 | amplify-build-config.json 27 | amplify-gradle-config.json 28 | amplifytools.xcconfig 29 | .secret-* 30 | **.sample 31 | #amplify-do-not-edit-end 32 | -------------------------------------------------------------------------------- /canaries/example/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /canaries/example/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /canaries/example/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | Todo 18 | -------------------------------------------------------------------------------- /canaries/example/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | ext.kotlin_version = "1.9.10" 4 | repositories { 5 | google() 6 | jcenter() 7 | } 8 | dependencies { 9 | classpath "com.android.tools.build:gradle:4.1.3" 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | // Add this line into `dependencies` in `buildscript` 15 | classpath 'com.amplifyframework:amplify-tools-gradle-plugin:+' 16 | } 17 | } 18 | 19 | allprojects { 20 | repositories { 21 | google() 22 | jcenter() 23 | } 24 | } 25 | 26 | task clean(type: Delete) { 27 | delete rootProject.buildDir 28 | } 29 | apply plugin: 'com.amplifyframework.amplifytools' -------------------------------------------------------------------------------- /canaries/example/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/canaries/example/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /canaries/example/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Apr 27 13:20:19 EDT 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 7 | -------------------------------------------------------------------------------- /canaries/example/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "Todo" -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | target: auto 6 | threshold: 0.1% 7 | patch: 8 | default: 9 | target: auto 10 | threshold: 0% 11 | comment: 12 | layout: diff 13 | behavior: default 14 | require_changes: false 15 | -------------------------------------------------------------------------------- /common-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /common-core/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=common-core 2 | POM_NAME=Amplify Framework for Android - Common Core 3 | POM_DESCRIPTION=Amplify Framework for Android - Shared Core components and utilties 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /common-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /configuration/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -keepclassmembers enum * { *; } 2 | 3 | -keep class com.amazonaws.** { *; } 4 | -keep class com.amplifyframework.** { *; } 5 | 6 | # We check for specific engine classes on the classpath to determine whether Amplify should use OkHttp4 instead of OkHttp5 7 | -keepnames class aws.smithy.kotlin.runtime.http.engine.okhttp4.* 8 | 9 | # OkHttp4 will not be present if not explicitly added by the customer, don't warn if it's missing 10 | -dontwarn aws.smithy.kotlin.runtime.http.engine.okhttp4.OkHttp4Engine 11 | 12 | # This Tink annotation is missing from an upstream dependency 13 | -dontwarn com.google.errorprone.annotations.Immutable -------------------------------------------------------------------------------- /configuration/java.header: -------------------------------------------------------------------------------- 1 | ^/\*$ 2 | ^ \* Copyright \d{4} Amazon\.com, Inc\. or its affiliates\. All Rights Reserved\.$ 3 | ^ \*$ 4 | ^ \* Licensed under the Apache License, Version 2\.0 \(the \"License\"\)\.$ 5 | ^ \* You may not use this file except in compliance with the License\.$ 6 | ^ \* A copy of the License is located at$ 7 | ^ \*$ 8 | ^ \* http://aws\.amazon\.com/apache2\.0$ 9 | ^ \*$ 10 | ^ \* or in the \"license\" file accompanying this file\. This file is distributed$ 11 | ^ \* on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either$ 12 | ^ \* express or implied\. See the License for the specific language governing$ 13 | ^ \* permissions and limitations under the License\.$ 14 | ^ \*/$ 15 | 16 | -------------------------------------------------------------------------------- /core-kotlin/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /core-kotlin/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=core-kotlin 2 | POM_NAME=Amplify Framework for Android - Kotlin facade for Core library 3 | POM_DESCRIPTION=Amplify Framework for Android - Kotlin facade for Core library 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /core-kotlin/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /core-kotlin/src/main/java/com/amplifyframework/kotlin/api/Api.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.kotlin.api 17 | 18 | /** 19 | * Interfaces to remote web service APIs. 20 | */ 21 | interface Api : Rest, GraphQL 22 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /core/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=core 2 | POM_NAME=Amplify Framework for Android - Core 3 | POM_DESCRIPTION=Amplify Framework for Android - Core components and utilties 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/auth/result/AuthSignOutResult.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.auth.result 17 | 18 | /** 19 | * Base SignOut result 20 | */ 21 | open class AuthSignOutResult 22 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/core/async/NoOpCancelable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.core.async; 17 | 18 | /** 19 | * A cancelable which does nothing. 20 | */ 21 | public final class NoOpCancelable implements Cancelable { 22 | @Override 23 | public void cancel() {} 24 | } 25 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/core/store/KeyValueRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.core.store 17 | 18 | interface KeyValueRepository { 19 | fun put(dataKey: String, value: String?) 20 | fun get(dataKey: String): String? 21 | fun remove(dataKey: String) 22 | fun removeAll() = Unit 23 | } 24 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/geo/models/Geometry.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.geo.models; 17 | 18 | /** 19 | * Represents a geometric shape on the map. 20 | * Can be a point or an area. 21 | */ 22 | public interface Geometry {} 23 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/predictions/models/ChallengeResponseEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.predictions.models 17 | 18 | import com.amplifyframework.annotations.InternalAmplifyApi 19 | 20 | @InternalAmplifyApi 21 | interface ChallengeResponseEvent { 22 | val challengeId: String 23 | } 24 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/predictions/models/FaceLivenessSessionChallenge.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.predictions.models 17 | 18 | import com.amplifyframework.annotations.InternalAmplifyApi 19 | 20 | @InternalAmplifyApi 21 | interface FaceLivenessSessionChallenge 22 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/predictions/models/VideoEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.predictions.models 17 | 18 | import com.amplifyframework.annotations.InternalAmplifyApi 19 | import java.util.Date 20 | 21 | @InternalAmplifyApi 22 | data class VideoEvent(val bytes: ByteArray, val timestamp: Date) 23 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/predictions/result/IdentifyResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.predictions.result; 17 | 18 | /** 19 | * Interface to group different types of results from 20 | * identify operation in Predictions category. 21 | */ 22 | public interface IdentifyResult {} 23 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/storage/BucketInfo.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | package com.amplifyframework.storage 16 | 17 | data class BucketInfo(val bucketName: String, val region: String) 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/amplifyframework/storage/result/StorageTransferResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.storage.result; 17 | 18 | /** 19 | * Base operation type for all transfer behavior on the Storage category. 20 | */ 21 | public abstract class StorageTransferResult {} 22 | -------------------------------------------------------------------------------- /core/src/test/resources/logging-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "userAgent": "aws-amplify-cli/2.0", 3 | "version": "1.0", 4 | "logging": { 5 | "plugins": { 6 | "SimpleLoggingPlugin": {}, 7 | "BadInitLoggingPlugin": {} 8 | } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /core/src/test/resources/no-shake-accel-values.csv: -------------------------------------------------------------------------------- 1 | 0.0,9.81,0.0 2 | -0.612022,9.81,0.0 3 | -0.264497,9.81,0.0 4 | -0.461849,9.81,0.0 5 | 0.491863,9.81,0.0 6 | -0.0915053,9.81,0.0 7 | 0.428751,9.81,0.0 8 | -0.210384,9.81,0.0 9 | 0.0458826,9.81,0.0 10 | 0.15787,9.81,0.0 11 | -0.21826,9.81,0.0 12 | 0.879606,9.81,0.0 13 | 0.00790215,9.81,0.0 14 | 0.0098114,9.81,0.0 15 | 0.0,9.81,0.0 16 | 0.0,9.81,0.0 17 | -0.414248,9.81,0.0 18 | 1.34898,9.81,0.0 19 | 0.0584576,9.81,0.0 20 | 0.310957,9.81,0.0 21 | 0.0626162,9.81,0.0 22 | -0.20604,9.81,0.0 23 | 0.0468068,9.81,0.0 24 | 0.0894199,9.81,0.0 25 | -1.10952,9.81,0.0 26 | 0.0,9.81,0.0 -------------------------------------------------------------------------------- /core/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | # suppress inspection "UnusedProperty" It's used via Robolectric, not Amplify directly. 2 | sdk=28 3 | -------------------------------------------------------------------------------- /core/src/test/resources/serialized-custom-type-nested-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "contact": { 3 | "phone": { 4 | "areaCode": "415", 5 | "countryCode": "1" 6 | }, 7 | "email": "tester@testing.com" 8 | }, 9 | "name": "Tester Testing", 10 | "mailingAddresses": [ 11 | { 12 | "postalCode": "123456", 13 | "state": "CA", 14 | "line1": "222 Somewhere far" 15 | }, 16 | { 17 | "postalCode": "123456", 18 | "state": "WA", 19 | "line2": "Apt 3", 20 | "line1": "444 Somewhere close" 21 | } 22 | ], 23 | "tags": [ 24 | "string1", 25 | "string2" 26 | ] 27 | } -------------------------------------------------------------------------------- /core/src/test/resources/serialized-model-nests-custom-type-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "mailingAddresses": [ 3 | { 4 | "postalCode": "123456", 5 | "state": "CA", 6 | "city": "San Francisco", 7 | "line2": null, 8 | "line1": "222 Somewhere far" 9 | }, 10 | { 11 | "postalCode": "123456", 12 | "state": "WA", 13 | "city": "Seattle", 14 | "line2": "Apt 3", 15 | "line1": "444 Somewhere close" 16 | } 17 | ], 18 | "requiredMailingAddresses": [], 19 | "contact": { 20 | "phone": { 21 | "areaCode": "415", 22 | "number": "6666666", 23 | "countryCode": "1" 24 | }, 25 | "email": "tester@testing.com" 26 | }, 27 | "name": "Tester Testing" 28 | } -------------------------------------------------------------------------------- /core/src/test/resources/shake-accel-values.csv: -------------------------------------------------------------------------------- 1 | 10.0,9.81,0.0 2 | -10.80261,9.81,0.0 3 | 10.919327,9.81,0.0 4 | -10.112216,9.81,0.0 5 | 10.677953,9.81,0.0 6 | -10.11294,9.81,0.0 7 | 10.42087,9.81,0.0 8 | -10.18172,9.81,0.0 9 | 10.10774,9.81,0.0 10 | -10.2037,9.81,0.0 11 | 10.48944,9.81,0.0 12 | -10.48008,9.81,0.0 13 | 10.654077,9.81,0.0 14 | -10.39407,9.81,0.0 15 | 10.58986,9.81,0.0 16 | -10.95795,9.81,0.0 17 | 10.93055,9.81,0.0 18 | -10.62994,9.81,0.0 19 | 10.33444,9.81,0.0 20 | -10.93107,9.81,0.0 21 | 10.72808,9.81,0.0 22 | -10.4937,9.81,0.0 23 | 10.82737,9.81,0.0 24 | -10.58073,9.81,0.0 25 | 10.8118,9.81,0.0 26 | -10.7198,9.81,0.0 27 | 10.11465,9.81,0.0 28 | -10.62785,9.81,0.0 29 | 10.0,9.81,0.0 -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /kover.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'org.jetbrains.kotlinx.kover' 2 | 3 | kover { 4 | currentProject { 5 | instrumentation { 6 | // exclude jdk internals from instrumentation 7 | excludedClasses.add "jdk.internal.*" 8 | } 9 | } 10 | reports { 11 | filters.excludes.androidGeneratedClasses() 12 | 13 | total { 14 | xml { 15 | // set to true to run koverXmlReport task during the execution of the check task (if it exists) of the current project 16 | onCheck.set false 17 | } 18 | 19 | html { 20 | // set to true to run koverMergedHtmlReport task during the execution of the check task (if it exists) of the current project 21 | onCheck.set false 22 | } 23 | } 24 | } 25 | } 26 | 27 | tasks.withType(Test) { 28 | kover { 29 | excludes = ['okhttp3.*'] // added to resolve conflict with mockk 30 | } 31 | } -------------------------------------------------------------------------------- /maplibre-adapter/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /maplibre-adapter/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=maplibre-adapter 2 | POM_NAME=MapLibre Adapter for Amplify Android Framework - Geo 3 | POM_DESCRIPTION=Amplify Framework for Android - Adapter for Amplify Geo Plugin 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /maplibre-adapter/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /maplibre-adapter/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-hdpi/place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-hdpi/place.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-hdpi/place_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-hdpi/place_active.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-mdpi/place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-mdpi/place.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-mdpi/place_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-mdpi/place_active.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-xhdpi/place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-xhdpi/place.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-xhdpi/place_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-xhdpi/place_active.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-xxhdpi/place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-xxhdpi/place.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable-xxhdpi/place_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/amplify-android/c365bd7fc089ca812f55beb5d1707770f4016513/maplibre-adapter/src/main/res/drawable-xxhdpi/place_active.png -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable/map_attribution_text_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable/map_control_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable/map_search_input_icon_spacer.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/drawable/map_search_update_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | 18 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /maplibre-adapter/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /rxbindings/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /rxbindings/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=rxbindings 2 | POM_NAME=Rx Bindings for Amplify Android Framework 3 | POM_DESCRIPTION=Rx Bindings for Amplify Android Framework 4 | POM_PACKAGING=aar 5 | 6 | -------------------------------------------------------------------------------- /rxbindings/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /rxbindings/src/test/resources/robolectric.properties: -------------------------------------------------------------------------------- 1 | sdk=28 2 | 3 | -------------------------------------------------------------------------------- /scripts/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | gem "addressable", ">= 2.8.0" 5 | gem "rexml", ">= 3.3.9" 6 | 7 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 8 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 9 | -------------------------------------------------------------------------------- /scripts/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file("") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one 2 | package_name("com.amplifyframework") # e.g. com.krausefx.app 3 | -------------------------------------------------------------------------------- /scripts/fastlane/Pluginfile: -------------------------------------------------------------------------------- 1 | # Autogenerated by fastlane 2 | # 3 | # Ensure this file is checked in to source control! 4 | 5 | gem 'fastlane-plugin-release_actions', git: 'https://github.com/aws-amplify/amplify-ci-support', branch: 'android/fastlane-actions', glob: 'src/fastlane/release_actions/*.gemspec' 6 | gem 'fastlane-plugin-semantic_release' 7 | -------------------------------------------------------------------------------- /scripts/python/metrics.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | def get_dimension(name, value): 4 | return { 5 | "Name": name, 6 | "Value": value 7 | } 8 | 9 | def get_metric(name, dimensions, value, unit): 10 | return { 11 | "MetricName": name, 12 | "Dimensions": dimensions, 13 | "Value": value, 14 | "Unit": unit 15 | } 16 | 17 | def get_exception(exc_info): 18 | filename_regex = "(\w+\.py)" 19 | exception_location = "" 20 | exc_type, exc_value, exc_traceback = exc_info 21 | tb = exc_traceback 22 | while tb is not None: 23 | frame = tb.tb_frame 24 | exception_location += re.findall(filename_regex, frame.f_code.co_filename)[0] + " @ " + \ 25 | frame.f_code.co_name + "#" + str(tb.tb_lineno) 26 | tb = tb.tb_next 27 | if tb is not None: 28 | exception_location += " >> " 29 | 30 | return exc_value, exception_location -------------------------------------------------------------------------------- /scripts/retry.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Usage: retry.sh 3 | 4 | readonly max_tries=$1 5 | readonly command="${@: 2}" 6 | attempts=0 7 | return_code=1 8 | while [[ $attempts -lt $max_tries ]]; do 9 | ((attempts++)) 10 | if [[ attempts -gt 1 ]]; then sleep 10; fi 11 | echo "RETRY: Attempt $attempts of $max_tries." 12 | $command && break 13 | done 14 | 15 | return_code=$? 16 | 17 | if [[ $return_code == 0 ]]; then 18 | echo "RETRY: Attempt $attempts succeeded." 19 | else 20 | echo "RETRY: All $attempts attempts failed." 21 | fi 22 | 23 | exit $return_code 24 | -------------------------------------------------------------------------------- /testmodels/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /testmodels/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/commentsblog/PostStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.testmodels.commentsblog; 17 | /** Auto generated enum from GraphQL schema. */ 18 | @SuppressWarnings("all") 19 | public enum PostStatus { 20 | ACTIVE, 21 | INACTIVE 22 | } 23 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/ecommerce/Status.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.testmodels.ecommerce; 17 | 18 | /** Auto generated enum from GraphQL schema. */ 19 | @SuppressWarnings("all") 20 | public enum Status { 21 | DELIVERED, 22 | IN_TRANSIT, 23 | PENDING, 24 | UNKNOWN 25 | } 26 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/ecommerce/schema.graphql: -------------------------------------------------------------------------------- 1 | type Customer @model @key(fields: ["email"]) { 2 | email: String! 3 | username: String 4 | } 5 | 6 | type Order @model @key(fields: ["customerEmail", "createdAt"]) { 7 | customerEmail: String! 8 | createdAt: String! 9 | orderId: ID! 10 | } 11 | 12 | type Item @model 13 | @key(fields: ["orderId", "status", "createdAt"]) 14 | @key(name: "ByStatus", fields: ["status", "createdAt"], queryField: "itemsByStatus") { 15 | orderId: ID! 16 | status: Status! 17 | createdAt: AWSDateTime! 18 | name: String! 19 | } 20 | enum Status { 21 | DELIVERED 22 | IN_TRANSIT 23 | PENDING 24 | UNKNOWN 25 | } -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/lazy/BlogPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.testmodels.lazy; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the Blog type in your schema. */ 10 | public final class BlogPath extends ModelPath { 11 | private PostPath posts; 12 | BlogPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, Blog.class); 14 | } 15 | 16 | public synchronized PostPath getPosts() { 17 | if (posts == null) { 18 | posts = new PostPath("posts", true, this); 19 | } 20 | return posts; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/lazy/CommentPath.java: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.testmodels.lazy; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.amplifyframework.core.model.ModelPath; 7 | import com.amplifyframework.core.model.PropertyPath; 8 | 9 | /** This is an auto generated class representing the ModelPath for the Comment type in your schema. */ 10 | public final class CommentPath extends ModelPath { 11 | private PostPath post; 12 | CommentPath(@NonNull String name, @NonNull Boolean isCollection, @Nullable PropertyPath parent) { 13 | super(name, isCollection, parent, Comment.class); 14 | } 15 | 16 | public synchronized PostPath getPost() { 17 | if (post == null) { 18 | post = new PostPath("post", false, this); 19 | } 20 | return post; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/lazy/schema.graphql: -------------------------------------------------------------------------------- 1 | # This "input" configures a global authorization rule to enable public access to 2 | # all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules 3 | input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY! 4 | 5 | type Blog @model { 6 | name: String! 7 | posts: [Post!]! @hasMany 8 | } 9 | 10 | type Post @model { 11 | name: String! 12 | blog: Blog! @belongsTo 13 | comments: [Comment] @hasMany 14 | } 15 | 16 | type Comment @model { 17 | text: String! 18 | post: Post! @belongsTo 19 | } -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/meeting/schema.graphql: -------------------------------------------------------------------------------- 1 | type Meeting @model { 2 | id: ID! 3 | name: String! 4 | date: AWSDate 5 | dateTime: AWSDateTime 6 | time: AWSTime 7 | timestamp: AWSTimestamp 8 | } -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/noteswithauth/schema.graphql: -------------------------------------------------------------------------------- 1 | type Task 2 | @model 3 | @auth(rules: [ 4 | {allow: groups, groups: ["Managers"], queries: null, mutations: [create, update, delete]}, 5 | {allow: groups, groups: ["Employees"], queries: [get, list], mutations: null} 6 | ]) 7 | { 8 | id: ID! 9 | title: String! 10 | description: String 11 | status: String 12 | } 13 | type PrivateNote 14 | @model 15 | @auth(rules: [{allow: owner}]) 16 | { 17 | id: ID! 18 | content: String! 19 | } 20 | type PublicNote @model { 21 | id: ID! 22 | content: String! 23 | } -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/ownerauth/schema.graphql: -------------------------------------------------------------------------------- 1 | type OwnerAuth @model 2 | @auth(rules: [{ allow: owner }]) 3 | { 4 | id: ID! 5 | title: String! 6 | } 7 | 8 | type OwnerAuthExplicit @model 9 | @auth(rules: [{ allow: owner }]) 10 | { 11 | id: ID! 12 | title: String! 13 | owner: String 14 | } 15 | 16 | 17 | type OwnerAuthReadUpdateOnly @model 18 | @auth(rules: [{ allow: owner, operations: [create, delete] }]) 19 | { 20 | id: ID! 21 | title: String! 22 | } 23 | 24 | type OwnerAuthCustomField @model 25 | @auth(rules: [ 26 | { allow: owner }, # Defaults to use the "owner" field. 27 | { allow: owner, ownerField: "editors", operations: [create, update, read] } # Authorize the update mutation and both queries. 28 | ]) 29 | { 30 | id: ID! 31 | title: String! 32 | } 33 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/parenting/City.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.testmodels.parenting; 17 | /** Auto generated enum from GraphQL schema. */ 18 | @SuppressWarnings("all") 19 | public enum City { 20 | FREETOWN, 21 | BO, 22 | MAKENI, 23 | KENEMA 24 | } 25 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/parenting/schema.graphql: -------------------------------------------------------------------------------- 1 | type Parent @model { 2 | id: ID! 3 | name: String! 4 | address: Address! 5 | children: [Child] 6 | } 7 | 8 | type Child { 9 | name: String! 10 | address: Address! 11 | } 12 | 13 | type Address { 14 | street: String! 15 | street2: String! 16 | city: City! 17 | country: String! 18 | } 19 | 20 | enum City { 21 | FREETOWN 22 | BO 23 | MAKENI 24 | KENEMA 25 | } 26 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/personcar/MaritalStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.testmodels.personcar; 17 | 18 | /** 19 | * Autogenerated enum from GraphQL schema. 20 | */ 21 | @SuppressWarnings("all") 22 | public enum MaritalStatus { 23 | single, 24 | engaged, 25 | married 26 | } 27 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/phonecall/schema.graphql: -------------------------------------------------------------------------------- 1 | type Person @model { 2 | id: ID! 3 | name: String! 4 | } 5 | 6 | type Phone @model { 7 | id: ID! 8 | number: String! 9 | ownerOfPhoneId: ID! 10 | ownerOfPhone: Person! @connection(fields: ["ownerOfPhoneId"]) 11 | calls: [Call] @connection(fields: ["id"]) 12 | } 13 | 14 | type Call @model { 15 | id: ID! 16 | startTime: AWSTime! 17 | callerId: ID! 18 | calleeId: ID! 19 | caller: Phone! @connection(fields: ["callerId"]) 20 | callee: Phone! @connection(fields: ["calleeId"]) 21 | } -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/todo/TodoStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/apache2.0 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | package com.amplifyframework.testmodels.todo; 17 | 18 | /** 19 | * Auto generated enum from GraphQL schema. 20 | */ 21 | @SuppressWarnings("all") 22 | public enum TodoStatus { 23 | Pending, 24 | InProgress, 25 | Done 26 | } 27 | -------------------------------------------------------------------------------- /testmodels/src/main/java/com/amplifyframework/testmodels/todo/schema.graphql: -------------------------------------------------------------------------------- 1 | type TodoOwner { 2 | name: String! 3 | email: AWSEmail 4 | } 5 | 6 | enum TodoStatus { 7 | Pending 8 | InProgress 9 | Done 10 | } 11 | 12 | type Todo @model { 13 | id: ID! 14 | title: String! 15 | content: String! 16 | status: TodoStatus! 17 | createdAt: AWSDateTime! 18 | lastUpdated: AWSTimestamp 19 | dueDate: AWSDate 20 | priority: Int 21 | hoursSpent: Float 22 | duplicate: Boolean! 23 | owner: TodoOwner! 24 | tags: [String] 25 | } 26 | -------------------------------------------------------------------------------- /testutils/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /testutils/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /testutils/src/main/java/com/amplifyframework/testutils/coroutines/RunBlockingWithTimeout.kt: -------------------------------------------------------------------------------- 1 | package com.amplifyframework.testutils.coroutines 2 | 3 | import kotlin.time.Duration 4 | import kotlin.time.Duration.Companion.seconds 5 | import kotlinx.coroutines.runBlocking 6 | import kotlinx.coroutines.withTimeout 7 | 8 | /** 9 | * Runs a blocking coroutine with a timeout. 10 | */ 11 | fun runBlockingWithTimeout(timeout: Duration = 10.seconds, block: suspend () -> T): T = runBlocking { 12 | withTimeout(timeout) { 13 | block() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /testutils/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | --------------------------------------------------------------------------------