├── .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 |
--------------------------------------------------------------------------------