diff --git a/.github/workflows/closed_issue_message.yml b/.github/workflows/closed_issue_message.yml
deleted file mode 100644
index 777d2271a5..0000000000
--- a/.github/workflows/closed_issue_message.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add warning message to issues when they are closed.
-
-name: Closed Issue Message
-on:
- issues:
- types: [closed]
-jobs:
- auto_comment:
- runs-on: ubuntu-latest
- steps:
- - uses: aws-actions/closed-issue-message@36b7048ea77bb834d16e7a7c5b5471ac767a4ca1 # v1
- with:
- # These inputs are both required
- repo-token: "${{ secrets.GITHUB_TOKEN }}"
- message: |
- This issue is now closed. Comments on closed issues are hard for our team to see.
- If you need more assistance, please open a new issue that references this one.
diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
deleted file mode 100644
index 21299fbb8e..0000000000
--- a/.github/workflows/gradle.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-# This workflow will build a Java project with Gradle
-# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
-
-name: Java CI with Gradle
-
-on:
- push:
- branches: [ main ]
- pull_request:
- branches: [ main ]
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2
- - name: Set up JDK 11
- uses: actions/setup-java@b6e674f4b717d7b0ae3baee0fbe79f498905dfde # v1
- with:
- java-version: 11
- - name: Grant execute permission for gradlew
- run: chmod +x gradlew
- - name: Build with Gradle
- run: scripts/retry.sh 3 "./gradlew clean build"
diff --git a/.github/workflows/issue_closed.yml b/.github/workflows/issue_closed.yml
new file mode 100644
index 0000000000..14f4a8afd1
--- /dev/null
+++ b/.github/workflows/issue_closed.yml
@@ -0,0 +1,32 @@
+name: Issue Closed
+
+on:
+ issues:
+ types: [closed]
+
+permissions:
+ issues: write
+
+jobs:
+ cleanup-labels:
+ runs-on: ubuntu-latest
+ if: ${{ (contains(github.event.issue.labels.*.name, 'pending-response') || contains(github.event.issue.labels.*.name, 'closing soon') || contains(github.event.issue.labels.*.name, 'pending-release')|| contains(github.event.issue.labels.*.name, 'pending-triage')) }}
+ steps:
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1
+ - name: remove unnecessary labels after closing
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ ISSUE_NUMBER: ${{ github.event.issue.number }}
+ run: |
+ gh issue edit $ISSUE_NUMBER --remove-label "closing soon" --remove-label "pending-response" --remove-label "pending-release" --remove-label "pending-triage"
+
+ comment-visibility-warning:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: aws-actions/closed-issue-message@36b7048ea77bb834d16e7a7c5b5471ac767a4ca1 # v1
+ with:
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
+ message: |
+ This issue is now closed. Comments on closed issues are hard for our team to see.
+ If you need more assistance, please open a new issue that references this one.
\ No newline at end of file
diff --git a/.github/workflows/issue_comment.yml b/.github/workflows/issue_comment.yml
new file mode 100644
index 0000000000..2ebed99ba5
--- /dev/null
+++ b/.github/workflows/issue_comment.yml
@@ -0,0 +1,34 @@
+name: Issue Comment
+
+on:
+ issue_comment:
+ types: [created]
+
+jobs:
+ notify:
+ runs-on: ubuntu-latest
+ permissions: {}
+ if: ${{ !github.event.issue.pull_request && !contains(fromJSON('["MEMBER", "OWNER"]'), github.event.comment.author_association) }}
+ steps:
+ - name: Run webhook curl command
+ env:
+ WEBHOOK_URL: ${{ secrets.SLACK_COMMENT_WEBHOOK_URL }}
+ BODY: ${{ toJson(github.event.comment.body) }}
+ COMMENT_URL: ${{github.event.comment.html_url}}
+ shell: bash
+ run: echo $BODY | xargs -I {} curl -s POST "$WEBHOOK_URL" -H "Content-Type:application/json" --data '{"body":"{}", "issue":"'$COMMENT_URL'"}'
+
+ remove-pending-response-label:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ if: ${{ !github.event.issue.pull_request && contains(github.event.issue.labels.*.name, 'pending-response') }}
+ steps:
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1
+ - name: remove unnecessary labels after closing
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ ISSUE_NUMBER: ${{ github.event.issue.number }}
+ run: |
+ gh issue edit $ISSUE_NUMBER --remove-label "pending-response"
diff --git a/.github/workflows/issue_labeled.yml b/.github/workflows/issue_labeled.yml
new file mode 100644
index 0000000000..74cac31820
--- /dev/null
+++ b/.github/workflows/issue_labeled.yml
@@ -0,0 +1,20 @@
+name: Issue Labeled
+on:
+ issues:
+ types: [labeled]
+
+jobs:
+ remove-pending-triage-label:
+ runs-on: ubuntu-latest
+ if: ${{ contains(fromJSON('["question", "bug", "feature-request", "improvement"]'), github.event.label.name) }}
+ permissions:
+ issues: write
+ steps:
+ - name: Remove the pending-triage label
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ ISSUE_NUMBER: ${{ github.event.issue.number }}
+ REPOSITORY_NAME: ${{ github.event.repository.full_name }}
+ run: |
+ gh issue edit $ISSUE_NUMBER --repo $REPOSITORY_NAME --remove-label "pending-triage"
\ No newline at end of file
diff --git a/.github/workflows/issue_opened.yml b/.github/workflows/issue_opened.yml
new file mode 100644
index 0000000000..b3ccf57364
--- /dev/null
+++ b/.github/workflows/issue_opened.yml
@@ -0,0 +1,48 @@
+name: Issue Opened
+on:
+ issues:
+ types: [opened]
+
+jobs:
+ notify:
+ runs-on: ubuntu-latest
+ permissions: {}
+ if: ${{ !contains(fromJSON('["MEMBER", "OWNER"]'), github.event.issue.author_association) }}
+ steps:
+ - name: Run webhook curl command
+ env:
+ WEBHOOK_URL: ${{ secrets.SLACK_ISSUE_WEBHOOK_URL }}
+ ISSUE: ${{toJson(github.event.issue.title)}}
+ ISSUE_URL: ${{github.event.issue.html_url}}
+ USER: ${{github.event.issue.user.login}}
+ shell: bash
+ run: echo $ISSUE | sed 's/[^a-zA-Z0-9 &().,:]//g' | xargs -I {} curl -s POST "$WEBHOOK_URL" -H "Content-Type:application/json" --data '{"issue":"{}", "issueUrl":"'$ISSUE_URL'", "user":"'$USER'"}'
+
+ add-pending-triage-label:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ steps:
+ - name: Add the pending-triage label
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ ISSUE_NUMBER: ${{ github.event.issue.number }}
+ REPOSITORY_NAME: ${{ github.event.repository.full_name }}
+ run: |
+ gh issue edit $ISSUE_NUMBER --repo $REPOSITORY_NAME --add-label "pending-triage"
+
+ maintainer-opened:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ if: ${{ contains(fromJSON('["MEMBER", "OWNER"]'), github.event.issue.author_association) }}
+ steps:
+ - name: Post comment if maintainer opened.
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ ISSUE_NUMBER: ${{ github.event.issue.number }}
+ REPOSITORY_NAME: ${{ github.event.repository.full_name }}
+ run: |
+ gh issue comment $ISSUE_NUMBER --repo $REPOSITORY_NAME -b "This issue was opened by a maintainer of this repository; updates will be posted here. If you are also experiencing this issue, please comment here with any relevant information so that we're aware and can prioritize accordingly."
\ No newline at end of file
diff --git a/.github/workflows/notify_comments.yml b/.github/workflows/notify_comments.yml
deleted file mode 100644
index f7eef52404..0000000000
--- a/.github/workflows/notify_comments.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-# This is a basic workflow to help you get started with Actions
-
-name: Notify Comments on PCR
-
-# Controls when the workflow will run
-on:
- # Triggers the workflow on comment events on closed, pending response and closing soon issues
- issue_comment:
- types: [created]
-
-# A workflow run is made up of one or more jobs that can run sequentially or in parallel
-jobs:
- # This workflow contains a single job called "notify"
- notify:
- # The type of runner that the job will run on
- runs-on: ubuntu-latest
-
- if: ${{ !github.event.issue.pull_request && (github.event.issue.state == 'closed' || contains(github.event.issue.labels.*.name, 'pending-response') || contains(github.event.issue.labels.*.name, 'closing soon')) }}
-
- # Steps represent a sequence of tasks that will be executed as part of the job
- steps:
- # Runs a single command using the runners shell
- - name: Run webhook curl command
- env:
- WEBHOOK_URL: ${{ secrets.SLACK_COMMENT_WEBHOOK_URL }}
- BODY: ${{ toJson(github.event.comment.body) }}
- COMMENT_URL: ${{github.event.comment.html_url}}
- shell: bash
- run: echo $BODY | xargs -I {} curl -s POST "$WEBHOOK_URL" -H "Content-Type:application/json" --data '{"body":"{}", "issue":"'$COMMENT_URL'"}'
diff --git a/.github/workflows/notify_pull_request.yml b/.github/workflows/notify_pull_request.yml
new file mode 100644
index 0000000000..419f4a8f6c
--- /dev/null
+++ b/.github/workflows/notify_pull_request.yml
@@ -0,0 +1,19 @@
+name: Notify Pull Request
+
+on:
+ pull_request:
+ types: [opened, ready_for_review, reopened]
+
+jobs:
+ notify:
+ runs-on: ubuntu-latest
+ if: ${{ !github.event.draft }}
+ steps:
+ - name: Run webhook curl command
+ env:
+ WEBHOOK_URL: ${{ secrets.SLACK_PR_WEBHOOK_URL }}
+ URL: ${{ github.event.pull_request.html_url }}
+ TITLE: ${{ github.event.pull_request.title }}
+ USER: ${{ github.event.pull_request.user.login }}
+ shell: bash
+ run: curl -s POST "$WEBHOOK_URL" -H "Content-Type:application/json" --data "{\"url\":\"$URL\", \"title\":\"$TITLE\", \"user\":\"$USER\"}"
diff --git a/.github/workflows/priority_bumper.yml b/.github/workflows/priority_bumper.yml
deleted file mode 100644
index 775c3bf017..0000000000
--- a/.github/workflows/priority_bumper.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Projects priority automation
-on:
- issue_comment:
- types: [created]
-
-jobs:
- bump_to_p2:
- runs-on: ubuntu-latest
- if: ${{ github.event.issue.comments > 10 }}
- steps:
- - name: Bump to P2
- env:
- GITHUB_TOKEN: ${{ secrets.PROJECT_WORKFLOW_TOKEN }}
- PROJECT_ID: ${{ secrets.PROJECT_ID }}
- ISSUE_ID: ${{ github.event.issue.node_id }}
- FIELD_ID: ${{ secrets.PRIORITY_COL }}
- FIELD_OPT_ID: ${{ secrets.P2_OPT_ID }}
- shell: bash
- run: curl -s POST https://api.github.com/graphql -H "Authorization:Bearer $GITHUB_TOKEN" --data '{"query":"mutation {updateProjectNextItemField(input:{projectId:\"${{ env.PROJECT_ID }}\" itemId:\"${{ env.ISSUE_ID }}\" fieldId:\"${{ env.FIELD_ID }}\" value:\"${{ env.FIELD_OPT_ID }}\"}) {projectNextItem {id}}}"}' > /dev/null
-
- bump_to_p1:
- runs-on: ubuntu-latest
- if: ${{ github.event.issue.comments > 15 }}
- steps:
- - name: Bump to P1
- env:
- GITHUB_TOKEN: ${{ secrets.PROJECT_WORKFLOW_TOKEN }}
- PROJECT_ID: ${{ secrets.PROJECT_ID }}
- ISSUE_ID: ${{ github.event.issue.node_id }}
- FIELD_ID: ${{ secrets.PRIORITY_COL }}
- FIELD_OPT_ID: ${{ secrets.P1_OPT_ID }}
- shell: bash
- run: curl -s POST https://api.github.com/graphql -H "Authorization:Bearer $GITHUB_TOKEN" --data '{"query":"mutation {updateProjectNextItemField(input:{projectId:\"${{ env.PROJECT_ID }}\" itemId:\"${{ env.ISSUE_ID }}\" fieldId:\"${{ env.FIELD_ID }}\" value:\"${{ env.FIELD_OPT_ID }}\"}) {projectNextItem {id}}}"}' > /dev/null
-
\ No newline at end of file
diff --git a/.github/workflows/project_automation.yml b/.github/workflows/project_automation.yml
deleted file mode 100644
index 04d602cee7..0000000000
--- a/.github/workflows/project_automation.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-name: Projects beta automation
-on:
- issues:
- types: [opened, assigned, unassigned, labeled, unlabeled]
-
-jobs:
- add_issue:
- runs-on: ubuntu-latest
- if: ${{ github.event.action == 'opened' }}
- steps:
- - name: Add to project
- env:
- GITHUB_TOKEN: ${{ secrets.PROJECT_WORKFLOW_TOKEN }}
- PROJECT_ID: ${{ secrets.PROJECT_ID }}
- ISSUE_ID: ${{ github.event.issue.node_id }}
- shell: bash
- run: |
- curl -s POST https://api.github.com/graphql -H "Authorization:Bearer $GITHUB_TOKEN" --data '{"query":"mutation {addProjectNextItem(input:{projectId:\"${{ env.PROJECT_ID }}\" contentId:\"${{ env.ISSUE_ID }}\"}) {projectNextItem {id}}}"}' > /dev/null
-
- move_to_wip:
- runs-on: ubuntu-latest
- if: ${{ github.event.action == 'assigned' || contains(github.event.issue.labels.*.name, 'pending-response') || contains(github.event.issue.labels.*.name, 'closing soon') }}
- steps:
- - name: Move to WIP column
- env:
- GITHUB_TOKEN: ${{ secrets.PROJECT_WORKFLOW_TOKEN }}
- PROJECT_ID: ${{ secrets.PROJECT_ID }}
- ISSUE_ID: ${{ github.event.issue.node_id }}
- FIELD_ID: ${{ secrets.STATUS_COL }}
- FIELD_OPT_ID: ${{ secrets.WIP_OPT_ID }}
- shell: bash
- run: |
- curl -s POST https://api.github.com/graphql -H "Authorization:Bearer $GITHUB_TOKEN" —data '{"query":"mutation {updateProjectNextItemField(input:{projectId:\"${{ env.PROJECT_ID }}\" itemId:\"${{ env.ISSUE_ID }}\" fieldId:\"${{ env.FIELD_ID }}\" value:\"${{ env.FIELD_OPT_ID }}\"}) {projectNextItem {id}}}"}' > /dev/null
-
- move_to_todo:
- runs-on: ubuntu-latest
- if: ${{ join(github.event.issue.assignees.*.login) == '' && !contains(github.event.issue.labels.*.name, 'pending-response') && !contains(github.event.issue.labels.*.name, 'closing soon') }}
- steps:
- - name: Move to Todo column
- env:
- GITHUB_TOKEN: ${{ secrets.PROJECT_WORKFLOW_TOKEN }}
- PROJECT_ID: ${{ secrets.PROJECT_ID }}
- ISSUE_ID: ${{ github.event.issue.node_id }}
- FIELD_ID: ${{ secrets.STATUS_COL }}
- FIELD_OPT_ID: ${{ secrets.TODO_OPT_ID }}
- shell: bash
- run: |
- curl -s POST https://api.github.com/graphql -H "Authorization:Bearer $GITHUB_TOKEN" --data '{"query":"mutation {updateProjectNextItemField(input:{projectId:\"${{ env.PROJECT_ID }}\" itemId:\"${{ env.ISSUE_ID }}\" fieldId:\"${{ env.FIELD_ID }}\" value:\"${{ env.FIELD_OPT_ID }}\"}) {projectNextItem {id}}}"}' > /dev/null
-
-
diff --git a/.github/workflows/publish_rollback.yml b/.github/workflows/publish_rollback.yml
deleted file mode 100644
index 02e7fd249d..0000000000
--- a/.github/workflows/publish_rollback.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Publish Rollback Artifacts
-
-on:
- workflow_dispatch:
-
-jobs:
- publish_rollback:
- runs-on: ubuntu-latest
- permissions:
- id-token: write
- steps:
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@5fd3084fc36e372ff1fff382a39b10d03659f355 #2.2.0
- with:
- role-to-assume: ${{ secrets.AMPLIFY_ANDROID_RELEASE_PUBLISHER_ROLE }}
- aws-region: us-east-1
- - name: Start Maven Release Build
- uses: aws-actions/aws-codebuild-run-build@d5a04846cedab61a0b7c897af0548af0d8fb14fb #1.0.12
- with:
- project-name: AmplifyAndroid-ReleasePublisher-V2
\ No newline at end of file
diff --git a/.github/workflows/release_pr_approval_count.yml b/.github/workflows/release_pr_approval_count.yml
deleted file mode 100644
index 776846547c..0000000000
--- a/.github/workflows/release_pr_approval_count.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-# Checks the number of a approvals for any pull requests from bump_version->main where the PR title starts with release
-# This should be setup as a protection rule on the main branch. PRs coming from other branches will be exempt from this rule
-name: Pull request approval checks
-on:
- pull_request_review:
- branches:
- - main
-jobs:
- count_approvals:
- runs-on: ubuntu-latest
- # This restricts which PRs this workflow applies to.
- if: ${{ github.event_name == 'pull_request_review'
- && github.event.pull_request.head.ref == 'bump_version'
- && startsWith(github.event.pull_request.title, 'release:')
- }}
- steps:
- - uses: actions/github-script@ffc2c79a5b2490bd33e0a41c1de74b877714d736 # v3
- id: get_approval_count
- with:
- github-token: ${{secrets.GITHUB_TOKEN}}
- script: |
- const reviews = await github.pulls.listReviews({
- owner: context.repo.owner,
- repo: context.repo.repo,
- pull_number: context.payload.pull_request.number,
- });
- const approvals = reviews.data.filter(review => review.state==='APPROVED').length;
- if (approvals < 2) {
- core.setFailed('Not enough approvals yet :(');
- }
diff --git a/.github/workflows/rollback_release.yml b/.github/workflows/rollback_release.yml
index e617aeaf98..faa206d4d2 100644
--- a/.github/workflows/rollback_release.yml
+++ b/.github/workflows/rollback_release.yml
@@ -11,24 +11,23 @@ on:
required: true
new_version:
description: 'The new version number (e.g. 2.9.3)'
+ required: true
-
+env:
+ AWS_REGION: "us-east-1"
+ BRANCH_FROM: ${{ inputs.branch_from }}
+ DEPRECATED_VERSION: ${{ inputs.deprecated_version }}
+ NEW_VERSION: ${{ inputs.new_version }}
+ CI_COMMIT_MESSAGE: Re-release v${{ inputs.branch_from }} as v${{ inputs.new_version }}
+ ROLLBACK_BRANCH: rollback_${{ inputs.deprecated_version }}
+ NEW_TAG: release_v${{ inputs.new_version }}
jobs:
- rollback-release:
+ create-rollback-branch:
runs-on: ubuntu-latest
- env:
- AWS_REGION: "us-east-1"
- BRANCH_FROM: ${{ inputs.branch_from }}
- DEPRECATED_VERSION: ${{ inputs.deprecated_version }}
- NEW_VERSION: ${{ inputs.new_version }}
- CI_COMMIT_MESSAGE: Re-release v${{ inputs.branch_from }} as v${{ inputs.new_version }}
- ROLLBACK_BRANCH: rollback_${{ inputs.deprecated_version }}
- NEW_TAG: release_v${{ inputs.new_version }}
permissions:
id-token: write
contents: write
- actions: write
steps:
- name: Checkout Source Code
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@@ -41,7 +40,7 @@ jobs:
run: |
git config --global user.email 41898282+github-actions[bot]@users.noreply.github.com
git config --global user.name github-actions[bot]
- sed -i 's/POM_VERSION=${{ env.BRANCH_FROM }}/POM_VERSION=${{ env.NEW_VERSION }}/g' gradle.properties
+ sed -i 's/VERSION_NAME=${{ env.BRANCH_FROM }}/VERSION_NAME=${{ env.NEW_VERSION }}/g' gradle.properties
echo -e '## [Release ${{ env.NEW_VERSION }}](https://github.com/${{ github.repository }}/releases/tag/${{ env.NEW_TAG }})\n\nThis is a re-release of version ${{ env.BRANCH_FROM }}. Use this instead of version ${{ env.DEPRECATED_VERSION }}.\n' | cat - CHANGELOG.md > temp && mv temp CHANGELOG.md
git add gradle.properties
git add CHANGELOG.md
@@ -50,16 +49,20 @@ jobs:
run: git tag "${{ env.NEW_TAG }}"
- name: Push Changes
run: git push --atomic origin ${{ env.ROLLBACK_BRANCH }} ${{ env.NEW_TAG }}
- - name: Run Publish
- uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1
+
+ publish-rollback:
+ needs: create-rollback-branch
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ steps:
+ - name: Configure AWS Credentials
+ uses: aws-actions/configure-aws-credentials@5fd3084fc36e372ff1fff382a39b10d03659f355 #2.2.0
+ with:
+ role-to-assume: ${{ secrets.AMPLIFY_ANDROID_RELEASE_PUBLISHER_ROLE }}
+ aws-region: ${{ env.AWS_REGION }}
+ - name: Start Maven Release Build
+ uses: aws-actions/aws-codebuild-run-build@2a49e1faf172677d80ce658678e9ff8bd2737d74 #1.0.15
with:
- # The aws-codebuild-run-build action automatically passes the source version that the workflow
- # is run on to Codebuild, and there is no override option. In order to run the Codebuild
- # release with our newly-created tag version we dispatch another workflow on that tag.
- script: |
- github.rest.actions.createWorkflowDispatch({
- owner: context.repo.owner,
- repo: context.repo.repo,
- workflow_id: 'rollback_publish.yml',
- ref: "${{ env.NEW_TAG }}",
- })
+ project-name: AmplifyAndroid-ReleasePublisher-V2
+ source-version-override: ${{ env.NEW_TAG }}
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 04d8266a43..80a2c0abf4 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -31,16 +31,11 @@
-
-
-
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f3fa0284ef..48772df8e8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,22 @@
+## [Release 2.14.10](https://github.com/aws-amplify/amplify-android/releases/tag/release_v2.14.10)
+
+### Features
+- **datastore:** Improve Sync Performance Through SQLite Transaction Batching ([#2703](https://github.com/aws-amplify/amplify-android/issues/2703))
+
+### Bug Fixes
+- **api:** Use provided Content-Type to create RequestBody ([#2666](https://github.com/aws-amplify/amplify-android/issues/2666))
+- **auth:** Add MFAType.challengeResponse extension ([#2680](https://github.com/aws-amplify/amplify-android/issues/2680))
+- **core:** use returns instead of answers on coEvery ([#2653](https://github.com/aws-amplify/amplify-android/issues/2653))
+- **datastore:** Fix DataStore peek exception ([#2702](https://github.com/aws-amplify/amplify-android/issues/2702))
+- **geo:** Fix Geo Plugin Auth injection ([#2704](https://github.com/aws-amplify/amplify-android/issues/2704))
+- **all:** Add fallback logic for corrupt keys to EncryptedKeyValueRepository ([#2686](https://github.com/aws-amplify/amplify-android/issues/2686))
+- **datastore:** Fix test failure introduced with slower test runs from SQLite ([#2708](https://github.com/aws-amplify/amplify-android/issues/2708))
+
+### Miscellaneous
+- Update to AWS Kotlin SDK v1.x stable ([#2695](https://github.com/aws-amplify/amplify-android/pull/2695))
+
+[See all changes between 2.14.9 and 2.14.10](https://github.com/aws-amplify/amplify-android/compare/release_v2.14.9...release_v2.14.10)
+
## [Release 2.14.9](https://github.com/aws-amplify/amplify-android/releases/tag/release_v2.14.9)
### Bug Fixes
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index db1dfc2fad..6164fed9a6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -362,6 +362,20 @@ The following command will spin up a docker container locally and run through th
Note that the `-c` option pulls in AWS configuration from your local environment into the docker container. That means any `AWS_*` environment variables will be set inside the container. This is useful when the build process needs to access AWS resources from an AWS account. **Be sure to check which AWS account your current credentials belong to and which permissions are granted**. Typically, the target account should be a development account.
+### Validate API Compatibility
+
+This project uses the [Kotlin Binary Compatibility Validator Plugin](https://github.com/Kotlin/binary-compatibility-validator) to validate our public API surface. Pull requests that include public API changes must modify the API file by running this gradle command:
+
+```bash
+./gradlew apiDump
+```
+
+You can check that your changes do not modify the public API by running this command:
+
+```bash
+./gradlew apiCheck
+```
+
## Reporting Bugs/Feature Requests
We welcome you to use the GitHub issue tracker to report bugs or suggest
diff --git a/README.md b/README.md
index d45072e960..01375a66fa 100644
--- a/README.md
+++ b/README.md
@@ -71,14 +71,14 @@ dependencies section:
```groovy
dependencies {
// Only specify modules that provide functionality your app will use
- implementation 'com.amplifyframework:aws-analytics-pinpoint:2.14.9'
- implementation 'com.amplifyframework:aws-api:2.14.9'
- implementation 'com.amplifyframework:aws-auth-cognito:2.14.9'
- implementation 'com.amplifyframework:aws-datastore:2.14.9'
- implementation 'com.amplifyframework:aws-predictions:2.14.9'
- implementation 'com.amplifyframework:aws-storage-s3:2.14.9'
- implementation 'com.amplifyframework:aws-geo-location:2.14.9'
- implementation 'com.amplifyframework:aws-push-notifications-pinpoint:2.14.9'
+ implementation 'com.amplifyframework:aws-analytics-pinpoint:2.14.10'
+ implementation 'com.amplifyframework:aws-api:2.14.10'
+ implementation 'com.amplifyframework:aws-auth-cognito:2.14.10'
+ implementation 'com.amplifyframework:aws-datastore:2.14.10'
+ implementation 'com.amplifyframework:aws-predictions:2.14.10'
+ implementation 'com.amplifyframework:aws-storage-s3:2.14.10'
+ implementation 'com.amplifyframework:aws-geo-location:2.14.10'
+ implementation 'com.amplifyframework:aws-push-notifications-pinpoint:2.14.10'
}
```
diff --git a/aws-analytics-pinpoint/api/aws-analytics-pinpoint.api b/aws-analytics-pinpoint/api/aws-analytics-pinpoint.api
new file mode 100644
index 0000000000..bf4af21523
--- /dev/null
+++ b/aws-analytics-pinpoint/api/aws-analytics-pinpoint.api
@@ -0,0 +1,49 @@
+public final class com/amplifyframework/analytics/pinpoint/AWSPinpointAnalyticsPlugin : com/amplifyframework/analytics/AnalyticsPlugin {
+ public fun ()V
+ public fun configure (Lorg/json/JSONObject;Landroid/content/Context;)V
+ public fun disable ()V
+ public fun enable ()V
+ public fun flushEvents ()V
+ public fun getEscapeHatch ()Laws/sdk/kotlin/services/pinpoint/PinpointClient;
+ public synthetic fun getEscapeHatch ()Ljava/lang/Object;
+ public fun getPluginKey ()Ljava/lang/String;
+ public fun getVersion ()Ljava/lang/String;
+ public fun identifyUser (Ljava/lang/String;Lcom/amplifyframework/analytics/UserProfile;)V
+ public fun recordEvent (Lcom/amplifyframework/analytics/AnalyticsEventBehavior;)V
+ public fun recordEvent (Ljava/lang/String;)V
+ public fun registerGlobalProperties (Lcom/amplifyframework/analytics/AnalyticsProperties;)V
+ public fun unregisterGlobalProperties ([Ljava/lang/String;)V
+}
+
+public final class com/amplifyframework/analytics/pinpoint/AnalyticsChannelEventName : java/lang/Enum {
+ public static final field FLUSH_EVENTS Lcom/amplifyframework/analytics/pinpoint/AnalyticsChannelEventName;
+ public static fun getEntries ()Lkotlin/enums/EnumEntries;
+ public final fun getEventName ()Ljava/lang/String;
+ public fun toString ()Ljava/lang/String;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/analytics/pinpoint/AnalyticsChannelEventName;
+ public static fun values ()[Lcom/amplifyframework/analytics/pinpoint/AnalyticsChannelEventName;
+}
+
+public final class com/amplifyframework/analytics/pinpoint/BuildConfig {
+ public static final field BUILD_TYPE Ljava/lang/String;
+ public static final field DEBUG Z
+ public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
+ public static final field VERSION_NAME Ljava/lang/String;
+ public fun ()V
+}
+
+public final class com/amplifyframework/analytics/pinpoint/models/AWSPinpointUserProfile : com/amplifyframework/analytics/UserProfile, com/amplifyframework/pinpoint/core/models/AWSPinpointUserProfileBehavior {
+ public static fun builder ()Lcom/amplifyframework/analytics/pinpoint/models/AWSPinpointUserProfile$Builder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getUserAttributes ()Lcom/amplifyframework/analytics/AnalyticsProperties;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/analytics/pinpoint/models/AWSPinpointUserProfile$Builder : com/amplifyframework/analytics/UserProfile$Builder {
+ public fun ()V
+ public synthetic fun build ()Lcom/amplifyframework/analytics/UserProfile;
+ public fun build ()Lcom/amplifyframework/analytics/pinpoint/models/AWSPinpointUserProfile;
+ public fun userAttributes (Lcom/amplifyframework/analytics/AnalyticsProperties;)Lcom/amplifyframework/analytics/pinpoint/models/AWSPinpointUserProfile$Builder;
+}
+
diff --git a/aws-api-appsync/api/aws-api-appsync.api b/aws-api-appsync/api/aws-api-appsync.api
new file mode 100644
index 0000000000..265e2d5909
--- /dev/null
+++ b/aws-api-appsync/api/aws-api-appsync.api
@@ -0,0 +1,406 @@
+public final class com/amplifyframework/api/aws/ApiGraphQLRequestOptions : com/amplifyframework/api/aws/GraphQLRequestOptions {
+ public fun ()V
+ public fun leafSerializationBehavior ()Lcom/amplifyframework/api/aws/LeafSerializationBehavior;
+ public fun listField ()Ljava/lang/String;
+ public fun maxDepth ()I
+ public fun modelMetaFields ()Ljava/util/List;
+ public fun paginationFields ()Ljava/util/List;
+}
+
+public final class com/amplifyframework/api/aws/AppSyncGraphQLRequest : com/amplifyframework/api/graphql/GraphQLRequest {
+ public static fun builder ()Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getAuthModeStrategyType ()Lcom/amplifyframework/api/aws/AuthModeStrategyType;
+ public fun getAuthRuleOperation ()Lcom/amplifyframework/core/model/ModelOperation;
+ public fun getAuthorizationType ()Lcom/amplifyframework/api/aws/AuthorizationType;
+ public fun getModelSchema ()Lcom/amplifyframework/core/model/ModelSchema;
+ public fun getOperation ()Lcom/amplifyframework/api/graphql/Operation;
+ public fun getQuery ()Ljava/lang/String;
+ public fun getVariables ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun newBuilder ()Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder {
+ public fun authorizationType (Lcom/amplifyframework/api/aws/AuthorizationType;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun build ()Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest;
+ public fun modelClass (Ljava/lang/Class;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun modelSchema (Lcom/amplifyframework/core/model/ModelSchema;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun operation (Lcom/amplifyframework/api/graphql/Operation;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun requestAuthorizationStrategyType (Lcom/amplifyframework/api/aws/AuthModeStrategyType;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun requestOptions (Lcom/amplifyframework/api/aws/GraphQLRequestOptions;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun responseType (Ljava/lang/reflect/Type;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun selectionSet (Lcom/amplifyframework/api/aws/SelectionSet;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+ public fun variable (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Lcom/amplifyframework/api/aws/AppSyncGraphQLRequest$Builder;
+}
+
+public final class com/amplifyframework/api/aws/AuthModeStrategyType : java/lang/Enum {
+ public static final field DEFAULT Lcom/amplifyframework/api/aws/AuthModeStrategyType;
+ public static final field MULTIAUTH Lcom/amplifyframework/api/aws/AuthModeStrategyType;
+ public fun from (Ljava/lang/String;)Lcom/amplifyframework/api/aws/AuthModeStrategyType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/aws/AuthModeStrategyType;
+ public static fun values ()[Lcom/amplifyframework/api/aws/AuthModeStrategyType;
+}
+
+public final class com/amplifyframework/api/aws/AuthorizationType : java/lang/Enum {
+ public static final field AMAZON_COGNITO_USER_POOLS Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static final field API_KEY Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static final field AWS_IAM Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static final field AWS_LAMBDA Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static final field NONE Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static final field OPENID_CONNECT Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static fun from (Lcom/amplifyframework/core/model/AuthStrategy$Provider;)Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static fun from (Lcom/amplifyframework/core/model/annotations/AuthRule;)Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static fun from (Ljava/lang/String;)Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/aws/AuthorizationType;
+ public static fun values ()[Lcom/amplifyframework/api/aws/AuthorizationType;
+}
+
+public abstract interface class com/amplifyframework/api/aws/GraphQLRequestOptions {
+ public abstract fun leafSerializationBehavior ()Lcom/amplifyframework/api/aws/LeafSerializationBehavior;
+ public abstract fun listField ()Ljava/lang/String;
+ public abstract fun maxDepth ()I
+ public abstract fun modelMetaFields ()Ljava/util/List;
+ public abstract fun paginationFields ()Ljava/util/List;
+}
+
+public final class com/amplifyframework/api/aws/GsonVariablesSerializer : com/amplifyframework/api/graphql/GraphQLRequest$VariablesSerializer {
+ public fun ()V
+ public fun (Lcom/google/gson/Gson;)V
+ public fun equals (Ljava/lang/Object;)Z
+ public fun hashCode ()I
+ public fun serialize (Ljava/util/Map;)Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/aws/LeafSerializationBehavior : java/lang/Enum {
+ public static final field ALL_FIELDS Lcom/amplifyframework/api/aws/LeafSerializationBehavior;
+ public static final field JUST_ID Lcom/amplifyframework/api/aws/LeafSerializationBehavior;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/aws/LeafSerializationBehavior;
+ public static fun values ()[Lcom/amplifyframework/api/aws/LeafSerializationBehavior;
+}
+
+public final class com/amplifyframework/api/aws/MultiAuthModeStrategy : com/amplifyframework/api/aws/AuthModeStrategy {
+ public fun authTypesFor (Lcom/amplifyframework/core/model/ModelSchema;Lcom/amplifyframework/core/model/ModelOperation;)Lcom/amplifyframework/core/model/auth/AuthorizationTypeIterator;
+ public static fun getInstance ()Lcom/amplifyframework/api/aws/MultiAuthModeStrategy;
+}
+
+public final class com/amplifyframework/api/aws/SelectionSet {
+ public fun (Lcom/amplifyframework/api/aws/SelectionSet;)V
+ public fun (Ljava/lang/String;)V
+ public fun (Ljava/lang/String;Ljava/util/Set;)V
+ public static fun builder ()Lcom/amplifyframework/api/aws/SelectionSet$Builder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getNodes ()Ljava/util/Set;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+ public fun toString (Ljava/lang/String;)Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/graphql/GsonResponseAdapters {
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+}
+
+public final class com/amplifyframework/api/graphql/GsonResponseAdapters$ErrorDeserializer : com/google/gson/JsonDeserializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/api/graphql/GraphQLResponse$Error;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+}
+
+public final class com/amplifyframework/api/graphql/GsonResponseAdapters$ResponseDeserializer : com/google/gson/JsonDeserializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/api/graphql/GraphQLResponse;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+}
+
+public final class com/amplifyframework/api/graphql/MutationType : java/lang/Enum, com/amplifyframework/api/graphql/Operation {
+ public static final field CREATE Lcom/amplifyframework/api/graphql/MutationType;
+ public static final field DELETE Lcom/amplifyframework/api/graphql/MutationType;
+ public static final field UPDATE Lcom/amplifyframework/api/graphql/MutationType;
+ public fun getOperationType ()Lcom/amplifyframework/api/graphql/OperationType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/graphql/MutationType;
+ public static fun values ()[Lcom/amplifyframework/api/graphql/MutationType;
+}
+
+public final class com/amplifyframework/api/graphql/QueryType : java/lang/Enum, com/amplifyframework/api/graphql/Operation {
+ public static final field GET Lcom/amplifyframework/api/graphql/QueryType;
+ public static final field LIST Lcom/amplifyframework/api/graphql/QueryType;
+ public static final field SYNC Lcom/amplifyframework/api/graphql/QueryType;
+ public fun getOperationType ()Lcom/amplifyframework/api/graphql/OperationType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/graphql/QueryType;
+ public static fun values ()[Lcom/amplifyframework/api/graphql/QueryType;
+}
+
+public final class com/amplifyframework/api/graphql/SubscriptionType : java/lang/Enum, com/amplifyframework/api/graphql/Operation {
+ public static final field ON_CREATE Lcom/amplifyframework/api/graphql/SubscriptionType;
+ public static final field ON_DELETE Lcom/amplifyframework/api/graphql/SubscriptionType;
+ public static final field ON_UPDATE Lcom/amplifyframework/api/graphql/SubscriptionType;
+ public fun getOperationType ()Lcom/amplifyframework/api/graphql/OperationType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/graphql/SubscriptionType;
+ public static fun values ()[Lcom/amplifyframework/api/graphql/SubscriptionType;
+}
+
+public final class com/amplifyframework/appsync/BuildConfig {
+ public static final field BUILD_TYPE Ljava/lang/String;
+ public static final field DEBUG Z
+ public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
+ public static final field VERSION_NAME Ljava/lang/String;
+ public fun ()V
+}
+
+public abstract interface class com/amplifyframework/core/model/auth/AuthorizationTypeIterator : java/util/Iterator {
+ public abstract fun isOwnerBasedRule ()Z
+}
+
+public final class com/amplifyframework/core/model/auth/MultiAuthorizationTypeIterator : com/amplifyframework/core/model/auth/AuthorizationTypeIterator {
+ public fun (Ljava/util/List;)V
+ public fun (Ljava/util/List;Ljava/util/Comparator;)V
+ public fun getAuthRuleStrategy ()Lcom/amplifyframework/core/model/AuthStrategy;
+ public fun hasNext ()Z
+ public fun isOwnerBasedRule ()Z
+ public fun next ()Lcom/amplifyframework/api/aws/AuthorizationType;
+ public synthetic fun next ()Ljava/lang/Object;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/core/model/query/predicate/GsonPredicateAdapters {
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+}
+
+public final class com/amplifyframework/core/model/query/predicate/GsonPredicateAdapters$QueryOperatorAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/query/predicate/QueryOperator;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun serialize (Lcom/amplifyframework/core/model/query/predicate/QueryOperator;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/query/predicate/GsonPredicateAdapters$QueryPredicateAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun serialize (Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/temporal/GsonTemporalAdapters {
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+}
+
+public final class com/amplifyframework/core/model/temporal/GsonTemporalAdapters$DateAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/temporal/Temporal$Date;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun serialize (Lcom/amplifyframework/core/model/temporal/Temporal$Date;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/temporal/GsonTemporalAdapters$DateTimeAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/temporal/Temporal$DateTime;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun serialize (Lcom/amplifyframework/core/model/temporal/Temporal$DateTime;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/temporal/GsonTemporalAdapters$JavaDateAdapter : com/google/gson/JsonSerializer {
+ public fun ()V
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public fun serialize (Ljava/util/Date;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/temporal/GsonTemporalAdapters$TimeAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/temporal/Temporal$Time;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun serialize (Lcom/amplifyframework/core/model/temporal/Temporal$Time;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/temporal/GsonTemporalAdapters$TimestampAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/temporal/Temporal$Timestamp;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun serialize (Lcom/amplifyframework/core/model/temporal/Temporal$Timestamp;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/core/model/temporal/Temporal {
+}
+
+public final class com/amplifyframework/core/model/temporal/Temporal$Date : java/io/Serializable, java/lang/Comparable {
+ public fun (Ljava/lang/String;)V
+ public fun (Ljava/util/Date;)V
+ public fun (Ljava/util/Date;I)V
+ public fun compareTo (Lcom/amplifyframework/core/model/temporal/Temporal$Date;)I
+ public synthetic fun compareTo (Ljava/lang/Object;)I
+ public fun equals (Ljava/lang/Object;)Z
+ public fun format ()Ljava/lang/String;
+ public fun getOffsetTotalSeconds ()I
+ public fun hashCode ()I
+ public fun toDate ()Ljava/util/Date;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/core/model/temporal/Temporal$DateTime : java/io/Serializable, java/lang/Comparable {
+ public fun (Ljava/lang/String;)V
+ public fun (Ljava/util/Date;I)V
+ public fun compareTo (Lcom/amplifyframework/core/model/temporal/Temporal$DateTime;)I
+ public synthetic fun compareTo (Ljava/lang/Object;)I
+ public fun equals (Ljava/lang/Object;)Z
+ public fun format ()Ljava/lang/String;
+ public fun getOffsetTotalSeconds ()I
+ public fun hashCode ()I
+ public fun toDate ()Ljava/util/Date;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/core/model/temporal/Temporal$Time : java/io/Serializable, java/lang/Comparable {
+ public fun (Ljava/lang/String;)V
+ public fun (Ljava/util/Date;)V
+ public fun (Ljava/util/Date;I)V
+ public fun compareTo (Lcom/amplifyframework/core/model/temporal/Temporal$Time;)I
+ public synthetic fun compareTo (Ljava/lang/Object;)I
+ public fun equals (Ljava/lang/Object;)Z
+ public fun format ()Ljava/lang/String;
+ public fun getOffsetTotalSeconds ()I
+ public fun hashCode ()I
+ public fun toDate ()Ljava/util/Date;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/core/model/temporal/Temporal$Timestamp : java/io/Serializable, java/lang/Comparable {
+ public fun ()V
+ public fun (JLjava/util/concurrent/TimeUnit;)V
+ public fun (Ljava/util/Date;)V
+ public fun compareTo (Lcom/amplifyframework/core/model/temporal/Temporal$Timestamp;)I
+ public synthetic fun compareTo (Ljava/lang/Object;)I
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getSecondsSinceEpoch ()J
+ public fun hashCode ()I
+ public static fun now ()Lcom/amplifyframework/core/model/temporal/Temporal$Timestamp;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/core/model/types/GsonJavaTypeAdapters {
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+}
+
+public final class com/amplifyframework/core/model/types/GsonJavaTypeAdapters$ClassTypeAdapterFactory : com/google/gson/TypeAdapterFactory {
+ public fun ()V
+ public fun create (Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+}
+
+public final class com/amplifyframework/core/model/types/GsonJavaTypeAdapters$StringDeserializer : com/google/gson/JsonDeserializer {
+ public fun ()V
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/String;
+}
+
+public final class com/amplifyframework/core/model/types/JavaFieldType : java/lang/Enum {
+ public static final field BOOLEAN Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field CUSTOM_TYPE Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field DATE Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field DATE_TIME Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field DOUBLE Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field ENUM Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field FLOAT Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field INTEGER Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field LONG Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field MODEL Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field STRING Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field TIME Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static final field TIMESTAMP Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static fun from (Ljava/lang/Class;)Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/core/model/types/JavaFieldType;
+ public static fun values ()[Lcom/amplifyframework/core/model/types/JavaFieldType;
+}
+
+public final class com/amplifyframework/datastore/appsync/AppSyncExtensions {
+ public fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
+ public fun (Ljava/util/Map;)V
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getData ()Ljava/util/Map;
+ public fun getErrorInfo ()Ljava/lang/String;
+ public fun getErrorType ()Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public fun hashCode ()I
+ public fun isUnauthorizedErrorType ()Z
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType : java/lang/Enum {
+ public static final field CONFLICT_UNHANDLED Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public static final field OPERATION_DISABLED Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public static final field UNAUTHORIZED Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public static final field UNAUTHORIZED_EXCEPTION Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public static fun enumerate (Ljava/lang/String;)Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public fun getValue ()Ljava/lang/String;
+ public fun toString ()Ljava/lang/String;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+ public static fun values ()[Lcom/amplifyframework/datastore/appsync/AppSyncExtensions$AppSyncErrorType;
+}
+
+public final class com/amplifyframework/datastore/appsync/ModelMetadata : com/amplifyframework/core/model/Model {
+ public fun (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Integer;Lcom/amplifyframework/core/model/temporal/Temporal$Timestamp;)V
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getLastChangedAt ()Lcom/amplifyframework/core/model/temporal/Temporal$Timestamp;
+ public fun getTypename ()Ljava/lang/String;
+ public fun getVersion ()Ljava/lang/Integer;
+ public fun hashCode ()I
+ public fun isDeleted ()Ljava/lang/Boolean;
+ public synthetic fun resolveIdentifier ()Ljava/io/Serializable;
+ public fun resolveIdentifier ()Ljava/lang/String;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/datastore/appsync/ModelWithMetadata {
+ public fun (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/datastore/appsync/ModelMetadata;)V
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getModel ()Lcom/amplifyframework/core/model/Model;
+ public fun getSyncMetadata ()Lcom/amplifyframework/datastore/appsync/ModelMetadata;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/datastore/appsync/ModelWithMetadataAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public static final field DELETED_KEY Ljava/lang/String;
+ public static final field LAST_CHANGED_AT_KEY Ljava/lang/String;
+ public static final field TYPE_NAME Ljava/lang/String;
+ public static final field VERSION_KEY Ljava/lang/String;
+ public fun ()V
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/datastore/appsync/ModelWithMetadata;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+ public fun serialize (Lcom/amplifyframework/datastore/appsync/ModelWithMetadata;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/datastore/appsync/SerializedCustomTypeAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/SerializedCustomType;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+ public fun serialize (Lcom/amplifyframework/core/model/SerializedCustomType;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/datastore/appsync/SerializedModelAdapter : com/google/gson/JsonDeserializer, com/google/gson/JsonSerializer {
+ public fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lcom/amplifyframework/core/model/SerializedModel;
+ public synthetic fun deserialize (Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object;
+ public static fun register (Lcom/google/gson/GsonBuilder;)V
+ public fun serialize (Lcom/amplifyframework/core/model/SerializedModel;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+ public synthetic fun serialize (Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement;
+}
+
+public final class com/amplifyframework/util/GsonFactory {
+ public static fun instance ()Lcom/google/gson/Gson;
+}
+
+public final class com/amplifyframework/util/GsonObjectConverter {
+ public static fun toList (Lcom/google/gson/JsonArray;)Ljava/util/List;
+ public static fun toMap (Lcom/google/gson/JsonObject;)Ljava/util/Map;
+}
+
+public final class com/amplifyframework/util/TypeMaker {
+ public static fun getParameterizedType ([Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+}
+
diff --git a/aws-api/api/aws-api.api b/aws-api/api/aws-api.api
new file mode 100644
index 0000000000..23958260e2
--- /dev/null
+++ b/aws-api/api/aws-api.api
@@ -0,0 +1,273 @@
+public final class com/amplifyframework/api/aws/AWSApiPlugin : com/amplifyframework/api/ApiPlugin {
+ public fun ()V
+ public fun (Lcom/amplifyframework/api/aws/ApiAuthProviders;)V
+ public static fun builder ()Lcom/amplifyframework/api/aws/AWSApiPlugin$Builder;
+ public fun configure (Lorg/json/JSONObject;Landroid/content/Context;)V
+ public fun delete (Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun delete (Ljava/lang/String;Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun get (Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun get (Ljava/lang/String;Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public synthetic fun getEscapeHatch ()Ljava/lang/Object;
+ public fun getEscapeHatch ()Ljava/util/Map;
+ public fun getPluginKey ()Ljava/lang/String;
+ public fun getVersion ()Ljava/lang/String;
+ public fun head (Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun head (Ljava/lang/String;Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun mutate (Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/graphql/GraphQLOperation;
+ public fun mutate (Ljava/lang/String;Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/graphql/GraphQLOperation;
+ public fun patch (Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun patch (Ljava/lang/String;Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun post (Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun post (Ljava/lang/String;Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun put (Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun put (Ljava/lang/String;Lcom/amplifyframework/api/rest/RestOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/rest/RestOperation;
+ public fun query (Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/graphql/GraphQLOperation;
+ public fun query (Ljava/lang/String;Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)Lcom/amplifyframework/api/graphql/GraphQLOperation;
+ public fun subscribe (Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Action;)Lcom/amplifyframework/api/graphql/GraphQLOperation;
+ public fun subscribe (Ljava/lang/String;Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Action;)Lcom/amplifyframework/api/graphql/GraphQLOperation;
+}
+
+public final class com/amplifyframework/api/aws/AWSApiPlugin$Builder {
+ public fun apiAuthProviders (Lcom/amplifyframework/api/aws/ApiAuthProviders;)Lcom/amplifyframework/api/aws/AWSApiPlugin$Builder;
+ public fun build ()Lcom/amplifyframework/api/aws/AWSApiPlugin;
+ public fun configureClient (Ljava/lang/String;Lcom/amplifyframework/api/aws/OkHttpConfigurator;)Lcom/amplifyframework/api/aws/AWSApiPlugin$Builder;
+ public fun configureWebSocketUpgradeClient (Ljava/lang/String;Lcom/amplifyframework/api/aws/OkHttpConfigurator;)Lcom/amplifyframework/api/aws/AWSApiPlugin$Builder;
+}
+
+public final class com/amplifyframework/api/aws/AWSApiPluginConfiguration {
+ public static fun builder ()Lcom/amplifyframework/api/aws/AWSApiPluginConfiguration$Builder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun hashCode ()I
+}
+
+public final class com/amplifyframework/api/aws/AWSApiPluginConfiguration$Builder {
+ public fun build ()Lcom/amplifyframework/api/aws/AWSApiPluginConfiguration;
+}
+
+public final class com/amplifyframework/api/aws/ApiAuthProviders {
+ public static fun builder ()Lcom/amplifyframework/api/aws/ApiAuthProviders$Builder;
+ public fun getAWSCredentialsProvider ()Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;
+ public fun getApiKeyAuthProvider ()Lcom/amplifyframework/api/aws/sigv4/ApiKeyAuthProvider;
+ public fun getCognitoUserPoolsAuthProvider ()Lcom/amplifyframework/api/aws/sigv4/CognitoUserPoolsAuthProvider;
+ public fun getFunctionAuthProvider ()Lcom/amplifyframework/api/aws/sigv4/FunctionAuthProvider;
+ public fun getOidcAuthProvider ()Lcom/amplifyframework/api/aws/sigv4/OidcAuthProvider;
+ public static fun noProviderOverrides ()Lcom/amplifyframework/api/aws/ApiAuthProviders;
+}
+
+public final class com/amplifyframework/api/aws/ApiAuthProviders$Builder {
+ public fun ()V
+ public fun apiKeyAuthProvider (Lcom/amplifyframework/api/aws/sigv4/ApiKeyAuthProvider;)Lcom/amplifyframework/api/aws/ApiAuthProviders$Builder;
+ public fun awsCredentialsProvider (Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;)Lcom/amplifyframework/api/aws/ApiAuthProviders$Builder;
+ public fun build ()Lcom/amplifyframework/api/aws/ApiAuthProviders;
+ public fun cognitoUserPoolsAuthProvider (Lcom/amplifyframework/api/aws/sigv4/CognitoUserPoolsAuthProvider;)Lcom/amplifyframework/api/aws/ApiAuthProviders$Builder;
+ public fun functionAuthProvider (Lcom/amplifyframework/api/aws/sigv4/FunctionAuthProvider;)Lcom/amplifyframework/api/aws/ApiAuthProviders$Builder;
+ public fun oidcAuthProvider (Lcom/amplifyframework/api/aws/sigv4/OidcAuthProvider;)Lcom/amplifyframework/api/aws/ApiAuthProviders$Builder;
+}
+
+public final class com/amplifyframework/api/aws/AppSyncGraphQLOperation : com/amplifyframework/api/aws/AWSGraphQLOperation {
+ public fun cancel ()V
+ public fun start ()V
+}
+
+public final class com/amplifyframework/api/aws/AppSyncGraphQLRequestFactory {
+ public static final field INSTANCE Lcom/amplifyframework/api/aws/AppSyncGraphQLRequestFactory;
+ public static final fun buildMutation (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lcom/amplifyframework/api/graphql/MutationType;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildMutation (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lcom/amplifyframework/api/graphql/MutationType;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildPaginatedResultQuery (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;I)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildPaginatedResultQuery (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;ILkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildQuery (Ljava/lang/Class;Lcom/amplifyframework/core/model/ModelIdentifier;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildQuery (Ljava/lang/Class;Lcom/amplifyframework/core/model/ModelIdentifier;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildQuery (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildQuery (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildQuery (Ljava/lang/Class;Ljava/lang/String;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildQuery (Ljava/lang/Class;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildSubscription (Ljava/lang/Class;Lcom/amplifyframework/api/graphql/SubscriptionType;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun buildSubscription (Ljava/lang/Class;Lcom/amplifyframework/api/graphql/SubscriptionType;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+}
+
+public final class com/amplifyframework/api/aws/BuildConfig {
+ public static final field BUILD_TYPE Ljava/lang/String;
+ public static final field DEBUG Z
+ public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
+ public static final field VERSION_NAME Ljava/lang/String;
+ public fun ()V
+}
+
+public final class com/amplifyframework/api/aws/DomainType : java/lang/Enum {
+ public static final field CUSTOM Lcom/amplifyframework/api/aws/DomainType;
+ public static final field STANDARD Lcom/amplifyframework/api/aws/DomainType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/aws/DomainType;
+ public static fun values ()[Lcom/amplifyframework/api/aws/DomainType;
+}
+
+public final class com/amplifyframework/api/aws/EndpointType : java/lang/Enum {
+ public static final field GRAPHQL Lcom/amplifyframework/api/aws/EndpointType;
+ public static final field REST Lcom/amplifyframework/api/aws/EndpointType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/api/aws/EndpointType;
+ public static fun values ()[Lcom/amplifyframework/api/aws/EndpointType;
+}
+
+public final class com/amplifyframework/api/aws/LazyTypeDeserializersKt {
+ public static final field ITEMS_KEY Ljava/lang/String;
+ public static final field NEXT_TOKEN_KEY Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/aws/MultiAuthAppSyncGraphQLOperation : com/amplifyframework/api/aws/AWSGraphQLOperation {
+ public fun cancel ()V
+ public fun start ()V
+}
+
+public abstract interface class com/amplifyframework/api/aws/OkHttpConfigurator {
+ public abstract fun applyConfiguration (Lokhttp3/OkHttpClient$Builder;)V
+}
+
+public final class com/amplifyframework/api/aws/auth/ApiKeyRequestDecorator : com/amplifyframework/api/aws/auth/RequestDecorator {
+ public fun (Lcom/amplifyframework/api/aws/sigv4/ApiKeyAuthProvider;)V
+ public fun decorate (Lokhttp3/Request;)Lokhttp3/Request;
+}
+
+public final class com/amplifyframework/api/aws/auth/ApiRequestDecoratorFactory {
+ public fun (Lcom/amplifyframework/api/aws/ApiAuthProviders;Lcom/amplifyframework/api/aws/AuthorizationType;Ljava/lang/String;Lcom/amplifyframework/api/aws/EndpointType;Ljava/lang/String;)V
+ public fun forAuthType (Lcom/amplifyframework/api/aws/AuthorizationType;)Lcom/amplifyframework/api/aws/auth/RequestDecorator;
+ public fun fromGraphQLRequest (Lcom/amplifyframework/api/graphql/GraphQLRequest;)Lcom/amplifyframework/api/aws/auth/RequestDecorator;
+}
+
+public final class com/amplifyframework/api/aws/auth/AuthRuleRequestDecorator {
+ public fun (Lcom/amplifyframework/api/aws/ApiAuthProviders;)V
+ public fun decorate (Lcom/amplifyframework/api/graphql/GraphQLRequest;Lcom/amplifyframework/api/aws/AuthorizationType;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+}
+
+public final class com/amplifyframework/api/aws/auth/CognitoJWTParser {
+ public static final field Companion Lcom/amplifyframework/api/aws/auth/CognitoJWTParser$Companion;
+ public fun ()V
+}
+
+public final class com/amplifyframework/api/aws/auth/CognitoJWTParser$Companion {
+ public final fun getClaim (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ public final fun getPayload (Ljava/lang/String;)Lorg/json/JSONObject;
+}
+
+public final class com/amplifyframework/api/aws/auth/CognitoParameterInvalidException : java/lang/RuntimeException {
+ public fun (Ljava/lang/String;Ljava/lang/Throwable;)V
+ public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public class com/amplifyframework/api/aws/auth/IamRequestDecorator : com/amplifyframework/api/aws/auth/RequestDecorator {
+ public fun (Lcom/amplifyframework/api/aws/sigv4/AWS4Signer;Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;Ljava/lang/String;)V
+ public final fun decorate (Lokhttp3/Request;)Lokhttp3/Request;
+}
+
+public abstract interface class com/amplifyframework/api/aws/auth/RequestDecorator {
+ public abstract fun decorate (Lokhttp3/Request;)Lokhttp3/Request;
+}
+
+public class com/amplifyframework/api/aws/auth/TokenRequestDecorator : com/amplifyframework/api/aws/auth/RequestDecorator {
+ public fun (Lcom/amplifyframework/api/aws/auth/TokenRequestDecorator$TokenSupplier;)V
+ public final fun decorate (Lokhttp3/Request;)Lokhttp3/Request;
+}
+
+public abstract interface class com/amplifyframework/api/aws/auth/TokenRequestDecorator$TokenSupplier {
+ public abstract fun get ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/aws/operation/AWSRestOperation : com/amplifyframework/api/rest/RestOperation {
+ public fun (Lcom/amplifyframework/api/rest/RestOperationRequest;Ljava/lang/String;Lokhttp3/OkHttpClient;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun cancel ()V
+ public fun start ()V
+}
+
+public abstract class com/amplifyframework/api/aws/sigv4/AWS4Signer {
+ public fun (Ljava/lang/String;)V
+ protected final fun getAwsSignedBodyHeaderType ()Laws/smithy/kotlin/runtime/auth/awssigning/AwsSignedBodyHeader;
+ protected final fun setAwsSignedBodyHeaderType (Laws/smithy/kotlin/runtime/auth/awssigning/AwsSignedBodyHeader;)V
+ public final fun sign (Laws/smithy/kotlin/runtime/http/request/HttpRequest;Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+ public final fun signBlocking (Laws/smithy/kotlin/runtime/http/request/HttpRequest;Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;Ljava/lang/String;)Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigningResult;
+}
+
+public final class com/amplifyframework/api/aws/sigv4/ApiGatewayIamSigner : com/amplifyframework/api/aws/sigv4/AWS4Signer {
+ public fun (Ljava/lang/String;)V
+}
+
+public abstract interface class com/amplifyframework/api/aws/sigv4/ApiKeyAuthProvider {
+ public abstract fun getAPIKey ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/aws/sigv4/AppSyncV4Signer : com/amplifyframework/api/aws/sigv4/AWS4Signer {
+ public fun (Ljava/lang/String;)V
+}
+
+public abstract interface class com/amplifyframework/api/aws/sigv4/AuthProvider {
+ public abstract fun getLatestAuthToken ()Ljava/lang/String;
+}
+
+public abstract interface class com/amplifyframework/api/aws/sigv4/CognitoUserPoolsAuthProvider {
+ public abstract fun getLatestAuthToken ()Ljava/lang/String;
+ public abstract fun getUsername ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/api/aws/sigv4/DefaultCognitoUserPoolsAuthProvider : com/amplifyframework/api/aws/sigv4/CognitoUserPoolsAuthProvider {
+ public fun ()V
+ public fun getLatestAuthToken ()Ljava/lang/String;
+ public fun getUsername ()Ljava/lang/String;
+}
+
+public abstract interface class com/amplifyframework/api/aws/sigv4/FunctionAuthProvider : com/amplifyframework/api/aws/sigv4/AuthProvider {
+}
+
+public abstract interface class com/amplifyframework/api/aws/sigv4/OidcAuthProvider : com/amplifyframework/api/aws/sigv4/AuthProvider {
+}
+
+public final class com/amplifyframework/api/aws/utils/RestRequestFactory {
+ public static fun createRequest (Ljava/net/URL;[BLjava/util/Map;Lcom/amplifyframework/api/rest/HttpMethod;)Lokhttp3/Request;
+ public static fun createURL (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Ljava/net/URL;
+}
+
+public final class com/amplifyframework/api/graphql/model/ModelMutation {
+ public static final field INSTANCE Lcom/amplifyframework/api/graphql/model/ModelMutation;
+ public static final fun create (Lcom/amplifyframework/core/model/Model;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun create (Lcom/amplifyframework/core/model/Model;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun delete (Lcom/amplifyframework/core/model/Model;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun delete (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun delete (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun delete (Lcom/amplifyframework/core/model/Model;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun update (Lcom/amplifyframework/core/model/Model;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun update (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun update (Lcom/amplifyframework/core/model/Model;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun update (Lcom/amplifyframework/core/model/Model;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+}
+
+public final class com/amplifyframework/api/graphql/model/ModelPagination {
+ public static fun firstPage ()Lcom/amplifyframework/api/graphql/model/ModelPagination;
+ public fun getLimit ()I
+ public static fun limit (I)Lcom/amplifyframework/api/graphql/model/ModelPagination;
+ public fun withLimit (I)Lcom/amplifyframework/api/graphql/model/ModelPagination;
+}
+
+public final class com/amplifyframework/api/graphql/model/ModelQuery {
+ public static final field INSTANCE Lcom/amplifyframework/api/graphql/model/ModelQuery;
+ public static final fun get (Ljava/lang/Class;Lcom/amplifyframework/core/model/ModelIdentifier;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun get (Ljava/lang/Class;Lcom/amplifyframework/core/model/ModelIdentifier;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun get (Ljava/lang/Class;Ljava/lang/String;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun get (Ljava/lang/Class;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lcom/amplifyframework/api/graphql/model/ModelPagination;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lcom/amplifyframework/api/graphql/model/ModelPagination;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lcom/amplifyframework/api/graphql/model/ModelPagination;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lcom/amplifyframework/api/graphql/model/ModelPagination;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lcom/amplifyframework/core/model/query/predicate/QueryPredicate;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun list (Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+}
+
+public final class com/amplifyframework/api/graphql/model/ModelSubscription {
+ public static final field INSTANCE Lcom/amplifyframework/api/graphql/model/ModelSubscription;
+ public final fun of (Ljava/lang/Class;Lcom/amplifyframework/api/graphql/SubscriptionType;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public final fun of (Ljava/lang/Class;Lcom/amplifyframework/api/graphql/SubscriptionType;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun onCreate (Ljava/lang/Class;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun onCreate (Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public final fun onDelete (Ljava/lang/Class;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun onDelete (Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public final fun onUpdate (Ljava/lang/Class;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+ public static final fun onUpdate (Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/api/graphql/GraphQLRequest;
+}
+
diff --git a/aws-api/src/androidTest/java/com/amplifyframework/api/aws/GraphQLLazyQueryInstrumentationTest.kt b/aws-api/src/androidTest/java/com/amplifyframework/api/aws/GraphQLLazyQueryInstrumentationTest.kt
index b45486df8b..a2d0673faf 100644
--- a/aws-api/src/androidTest/java/com/amplifyframework/api/aws/GraphQLLazyQueryInstrumentationTest.kt
+++ b/aws-api/src/androidTest/java/com/amplifyframework/api/aws/GraphQLLazyQueryInstrumentationTest.kt
@@ -38,6 +38,7 @@ import com.amplifyframework.datastore.generated.model.ProjectPath
import com.amplifyframework.datastore.generated.model.Team
import com.amplifyframework.datastore.generated.model.TeamPath
import com.amplifyframework.kotlin.core.Amplify
+import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@@ -50,6 +51,7 @@ import org.junit.Test
class GraphQLLazyQueryInstrumentationTest {
companion object {
+ val LONG_TIMEOUT = 20.seconds // Some test we pull and process 1000k records. Increase timeout for slow tests
const val PARENT1_ID = "GraphQLLazyQueryInstrumentationTest-Parent"
const val PARENT2_ID = "GraphQLLazyQueryInstrumentationTest-Parent2"
@@ -144,7 +146,7 @@ class GraphQLLazyQueryInstrumentationTest {
// }
@Test
- fun query_parent_no_includes() = runTest {
+ fun query_parent_no_includes() = runTest(timeout = LONG_TIMEOUT) {
// GIVEN
val request = ModelQuery[Parent::class.java, Parent.ParentIdentifier(PARENT1_ID)]
@@ -196,7 +198,7 @@ class GraphQLLazyQueryInstrumentationTest {
}
@Test
- fun query_list_with_no_includes() = runTest {
+ fun query_list_with_no_includes() = runTest(timeout = LONG_TIMEOUT) {
val request = ModelQuery.list(
Parent::class.java,
diff --git a/aws-api/src/androidTest/java/com/amplifyframework/api/aws/SubscriptionEndpointTest.java b/aws-api/src/androidTest/java/com/amplifyframework/api/aws/SubscriptionEndpointTest.java
index d7f79bfd18..13327da812 100644
--- a/aws-api/src/androidTest/java/com/amplifyframework/api/aws/SubscriptionEndpointTest.java
+++ b/aws-api/src/androidTest/java/com/amplifyframework/api/aws/SubscriptionEndpointTest.java
@@ -52,6 +52,7 @@ public final class SubscriptionEndpointTest {
private SubscriptionEndpoint subscriptionEndpoint;
private String eventId;
private Set subscriptionIdsForRelease;
+ private ApiConfiguration apiConfiguration;
/**
* Create an {@link SubscriptionEndpoint}.
@@ -68,7 +69,7 @@ public void setup() throws ApiException, JSONException {
.getJSONObject("plugins")
.getJSONObject("awsAPIPlugin");
AWSApiPluginConfiguration pluginConfiguration = AWSApiPluginConfigurationReader.readFrom(configJson);
- ApiConfiguration apiConfiguration = pluginConfiguration.getApi(endpointConfigKey);
+ apiConfiguration = pluginConfiguration.getApi(endpointConfigKey);
assertNotNull(apiConfiguration);
final GraphQLResponse.Factory responseFactory = new GsonGraphQLResponseFactory();
@@ -184,6 +185,7 @@ private String subscribeToEventComments(String eventId) throws ApiException {
executor.execute(() ->
subscriptionEndpoint.requestSubscription(
request,
+ apiConfiguration.getAuthorizationType(),
onResult,
item -> {
final String message;
diff --git a/aws-api/src/main/java/com/amplifyframework/api/aws/SubscriptionEndpoint.java b/aws-api/src/main/java/com/amplifyframework/api/aws/SubscriptionEndpoint.java
index 218186ce73..3656db80d2 100644
--- a/aws-api/src/main/java/com/amplifyframework/api/aws/SubscriptionEndpoint.java
+++ b/aws-api/src/main/java/com/amplifyframework/api/aws/SubscriptionEndpoint.java
@@ -103,21 +103,7 @@ final class SubscriptionEndpoint {
this.okHttpClient = okHttpClientBuilder.build();
}
- synchronized void requestSubscription(
- @NonNull GraphQLRequest request,
- @NonNull Consumer onSubscriptionStarted,
- @NonNull Consumer> onNextItem,
- @NonNull Consumer onSubscriptionError,
- @NonNull Action onSubscriptionComplete) {
- requestSubscription(request,
- apiConfiguration.getAuthorizationType(),
- onSubscriptionStarted,
- onNextItem,
- onSubscriptionError,
- onSubscriptionComplete);
- }
-
- synchronized void requestSubscription(
+ void requestSubscription(
@NonNull GraphQLRequest request,
@NonNull AuthorizationType authType,
@NonNull Consumer onSubscriptionStarted,
diff --git a/aws-api/src/main/java/com/amplifyframework/api/aws/auth/IamRequestDecorator.java b/aws-api/src/main/java/com/amplifyframework/api/aws/auth/IamRequestDecorator.java
index 3898641868..0aecd7a385 100644
--- a/aws-api/src/main/java/com/amplifyframework/api/aws/auth/IamRequestDecorator.java
+++ b/aws-api/src/main/java/com/amplifyframework/api/aws/auth/IamRequestDecorator.java
@@ -18,7 +18,8 @@
import com.amplifyframework.api.ApiException.ApiAuthException;
import com.amplifyframework.api.aws.sigv4.AWS4Signer;
-import aws.smithy.kotlin.runtime.net.Url;
+import aws.smithy.kotlin.runtime.net.url.Url;
+import aws.smithy.kotlin.runtime.net.url.UrlEncoding;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -28,8 +29,8 @@
import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider;
import aws.smithy.kotlin.runtime.http.DeferredHeaders;
import aws.smithy.kotlin.runtime.http.Headers;
+import aws.smithy.kotlin.runtime.http.HttpBody;
import aws.smithy.kotlin.runtime.http.HttpMethod;
-import aws.smithy.kotlin.runtime.http.content.ByteArrayContent;
import aws.smithy.kotlin.runtime.http.request.HttpRequest;
import aws.smithy.kotlin.runtime.http.request.HttpRequestKt;
import okhttp3.MediaType;
@@ -68,10 +69,10 @@ public IamRequestDecorator(AWS4Signer signer, CredentialsProvider credentialsPro
public final okhttp3.Request decorate(okhttp3.Request req) throws ApiAuthException {
//set the request body
final byte[] bodyBytes = getBytes(req.body());
- ByteArrayContent body2 = new ByteArrayContent(bodyBytes);
+ HttpBody body2 = HttpBody.Companion.fromBytes(bodyBytes);
HttpMethod method = HttpMethod.Companion.parse(req.method());
- Url url = Url.Companion.parse(req.url().uri().toString());
+ Url url = Url.Companion.parse(req.url().uri().toString(), UrlEncoding.Companion.getAll());
Headers headers = Headers.Companion.invoke((builder) -> {
for (String headerName : req.headers().names()) {
builder.set(headerName, req.header(headerName));
diff --git a/aws-api/src/test/java/com/amplifyframework/api/aws/auth/ApiRequestDecoratorFactoryTest.kt b/aws-api/src/test/java/com/amplifyframework/api/aws/auth/ApiRequestDecoratorFactoryTest.kt
index 8883e20800..1d2691e1eb 100644
--- a/aws-api/src/test/java/com/amplifyframework/api/aws/auth/ApiRequestDecoratorFactoryTest.kt
+++ b/aws-api/src/test/java/com/amplifyframework/api/aws/auth/ApiRequestDecoratorFactoryTest.kt
@@ -16,7 +16,7 @@ package com.amplifyframework.api.aws.auth
import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials
import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider
-import aws.smithy.kotlin.runtime.util.Attributes
+import aws.smithy.kotlin.runtime.collections.Attributes
import com.amplifyframework.api.ApiException
import com.amplifyframework.api.ApiException.ApiAuthException
import com.amplifyframework.api.aws.ApiAuthProviders
diff --git a/aws-api/src/test/java/com/amplifyframework/api/aws/auth/DummyCredentialsProvider.kt b/aws-api/src/test/java/com/amplifyframework/api/aws/auth/DummyCredentialsProvider.kt
index 3c16e07784..c284dbd44f 100644
--- a/aws-api/src/test/java/com/amplifyframework/api/aws/auth/DummyCredentialsProvider.kt
+++ b/aws-api/src/test/java/com/amplifyframework/api/aws/auth/DummyCredentialsProvider.kt
@@ -16,7 +16,7 @@
package com.amplifyframework.api.aws.auth
import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials
-import aws.smithy.kotlin.runtime.util.Attributes
+import aws.smithy.kotlin.runtime.collections.Attributes
import com.amplifyframework.auth.CognitoCredentialsProvider
internal object DummyCredentialsProvider : CognitoCredentialsProvider() {
diff --git a/aws-auth-cognito/api/aws-auth-cognito.api b/aws-auth-cognito/api/aws-auth-cognito.api
new file mode 100644
index 0000000000..3b1d9e0a4d
--- /dev/null
+++ b/aws-auth-cognito/api/aws-auth-cognito.api
@@ -0,0 +1,678 @@
+public final class com/amplifyframework/auth/cognito/AWSCognitoAuthChannelEventName : java/lang/Enum {
+ public static final field FEDERATED_TO_IDENTITY_POOL Lcom/amplifyframework/auth/cognito/AWSCognitoAuthChannelEventName;
+ public static final field FEDERATION_TO_IDENTITY_POOL_CLEARED Lcom/amplifyframework/auth/cognito/AWSCognitoAuthChannelEventName;
+ public static fun getEntries ()Lkotlin/enums/EnumEntries;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/AWSCognitoAuthChannelEventName;
+ public static fun values ()[Lcom/amplifyframework/auth/cognito/AWSCognitoAuthChannelEventName;
+}
+
+public final class com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin : com/amplifyframework/auth/AuthPlugin {
+ public static final field AWS_COGNITO_AUTH_LOG_NAMESPACE Ljava/lang/String;
+ public static final field Companion Lcom/amplifyframework/auth/cognito/AWSCognitoAuthPlugin$Companion;
+ public fun ()V
+ public final fun clearFederationToIdentityPool (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun configure (Lorg/json/JSONObject;Landroid/content/Context;)V
+ public fun confirmResetPassword (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthConfirmResetPasswordOptions;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun confirmResetPassword (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun confirmSignIn (Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthConfirmSignInOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun confirmSignIn (Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun confirmSignUp (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthConfirmSignUpOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun confirmSignUp (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun confirmUserAttribute (Lcom/amplifyframework/auth/AuthUserAttributeKey;Ljava/lang/String;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun deleteUser (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public final fun federateToIdentityPool (Ljava/lang/String;Lcom/amplifyframework/auth/AuthProvider;Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public final fun federateToIdentityPool (Ljava/lang/String;Lcom/amplifyframework/auth/AuthProvider;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun fetchAuthSession (Lcom/amplifyframework/auth/options/AuthFetchSessionOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun fetchAuthSession (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun fetchDevices (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public final fun fetchMFAPreference (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun fetchUserAttributes (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun forgetDevice (Lcom/amplifyframework/auth/AuthDevice;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun forgetDevice (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun getCurrentUser (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun getEscapeHatch ()Lcom/amplifyframework/auth/cognito/AWSCognitoAuthService;
+ public synthetic fun getEscapeHatch ()Ljava/lang/Object;
+ public fun getPluginKey ()Ljava/lang/String;
+ public fun getVersion ()Ljava/lang/String;
+ public fun handleWebUISignInResponse (Landroid/content/Intent;)V
+ public fun initialize (Landroid/content/Context;)V
+ public fun rememberDevice (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun resendSignUpCode (Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthResendSignUpCodeOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun resendSignUpCode (Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun resendUserAttributeConfirmationCode (Lcom/amplifyframework/auth/AuthUserAttributeKey;Lcom/amplifyframework/auth/options/AuthResendUserAttributeConfirmationCodeOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun resendUserAttributeConfirmationCode (Lcom/amplifyframework/auth/AuthUserAttributeKey;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun resetPassword (Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthResetPasswordOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun resetPassword (Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun setUpTOTP (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signIn (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthSignInOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signIn (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signInWithSocialWebUI (Lcom/amplifyframework/auth/AuthProvider;Landroid/app/Activity;Lcom/amplifyframework/auth/options/AuthWebUISignInOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signInWithSocialWebUI (Lcom/amplifyframework/auth/AuthProvider;Landroid/app/Activity;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signInWithWebUI (Landroid/app/Activity;Lcom/amplifyframework/auth/options/AuthWebUISignInOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signInWithWebUI (Landroid/app/Activity;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun signOut (Lcom/amplifyframework/auth/options/AuthSignOutOptions;Lcom/amplifyframework/core/Consumer;)V
+ public fun signOut (Lcom/amplifyframework/core/Consumer;)V
+ public fun signUp (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthSignUpOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public final fun updateMFAPreference (Lcom/amplifyframework/auth/cognito/MFAPreference;Lcom/amplifyframework/auth/cognito/MFAPreference;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun updatePassword (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun updateUserAttribute (Lcom/amplifyframework/auth/AuthUserAttribute;Lcom/amplifyframework/auth/options/AuthUpdateUserAttributeOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun updateUserAttribute (Lcom/amplifyframework/auth/AuthUserAttribute;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun updateUserAttributes (Ljava/util/List;Lcom/amplifyframework/auth/options/AuthUpdateUserAttributesOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun updateUserAttributes (Ljava/util/List;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
+ public fun verifyTOTPSetup (Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthVerifyTOTPSetupOptions;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+ public fun verifyTOTPSetup (Ljava/lang/String;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
+}
+
+public final class com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin$Companion {
+}
+
+public abstract interface class com/amplifyframework/auth/cognito/AWSCognitoAuthService {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/AWSCognitoAuthService$Companion;
+ public abstract fun getCognitoIdentityClient ()Laws/sdk/kotlin/services/cognitoidentity/CognitoIdentityClient;
+ public abstract fun getCognitoIdentityProviderClient ()Laws/sdk/kotlin/services/cognitoidentityprovider/CognitoIdentityProviderClient;
+ public abstract fun getCustomUserAgentPairs ()Ljava/util/Map;
+}
+
+public final class com/amplifyframework/auth/cognito/AWSCognitoAuthService$Companion {
+}
+
+public final class com/amplifyframework/auth/cognito/AWSCognitoAuthSession : com/amplifyframework/auth/AWSAuthSessionBehavior {
+ public final fun component1 ()Z
+ public final fun component2 ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public final fun component3 ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public final fun component4 ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public final fun component5 ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public final fun copy (ZLcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;)Lcom/amplifyframework/auth/cognito/AWSCognitoAuthSession;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/AWSCognitoAuthSession;ZLcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/AWSCognitoAuthSession;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getAccessToken ()Ljava/lang/String;
+ public fun getAwsCredentialsResult ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public fun getIdentityIdResult ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public final fun getUserPoolTokensResult ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public fun getUserSubResult ()Lcom/amplifyframework/auth/result/AuthSessionResult;
+ public fun hashCode ()I
+ public fun isSignedIn ()Z
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/BuildConfig {
+ public static final field BUILD_TYPE Ljava/lang/String;
+ public static final field DEBUG Z
+ public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
+ public static final field VERSION_NAME Ljava/lang/String;
+ public fun ()V
+}
+
+public final class com/amplifyframework/auth/cognito/MFAPreference : java/lang/Enum {
+ public static final field DISABLED Lcom/amplifyframework/auth/cognito/MFAPreference;
+ public static final field ENABLED Lcom/amplifyframework/auth/cognito/MFAPreference;
+ public static final field NOT_PREFERRED Lcom/amplifyframework/auth/cognito/MFAPreference;
+ public static final field PREFERRED Lcom/amplifyframework/auth/cognito/MFAPreference;
+ public static fun getEntries ()Lkotlin/enums/EnumEntries;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/MFAPreference;
+ public static fun values ()[Lcom/amplifyframework/auth/cognito/MFAPreference;
+}
+
+public final class com/amplifyframework/auth/cognito/MFATypeUtil {
+ public static final fun getChallengeResponse (Lcom/amplifyframework/auth/MFAType;)Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/UserMFAPreference {
+ public fun (Ljava/util/Set;Lcom/amplifyframework/auth/MFAType;)V
+ public final fun component1 ()Ljava/util/Set;
+ public final fun component2 ()Lcom/amplifyframework/auth/MFAType;
+ public final fun copy (Ljava/util/Set;Lcom/amplifyframework/auth/MFAType;)Lcom/amplifyframework/auth/cognito/UserMFAPreference;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/UserMFAPreference;Ljava/util/Set;Lcom/amplifyframework/auth/MFAType;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/UserMFAPreference;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getEnabled ()Ljava/util/Set;
+ public final fun getPreferred ()Lcom/amplifyframework/auth/MFAType;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/exceptions/configuration/InvalidOauthConfigurationException : com/amplifyframework/auth/exceptions/ConfigurationException {
+ public fun ()V
+}
+
+public final class com/amplifyframework/auth/cognito/exceptions/configuration/InvalidUserPoolConfigurationException : com/amplifyframework/auth/exceptions/ConfigurationException {
+ public fun ()V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/invalidstate/SignedInException : com/amplifyframework/auth/exceptions/InvalidStateException {
+ public fun ()V
+ public fun (Ljava/lang/String;Ljava/lang/String;)V
+ public synthetic fun (Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/AliasExistsException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/CodeDeliveryFailureException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun ()V
+ public fun (Ljava/lang/Throwable;)V
+ public synthetic fun (Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/CodeExpiredException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/CodeMismatchException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/CodeValidationException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun ()V
+ public fun (Ljava/lang/String;)V
+ public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/EnableSoftwareTokenMFAException : com/amplifyframework/auth/AuthException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/FailedAttemptsLimitExceededException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/GlobalSignOutException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/HostedUISignOutException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Z)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/InvalidAccountTypeException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+ public fun getCause ()Ljava/lang/Throwable;
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/InvalidGrantException : com/amplifyframework/auth/AuthException {
+ public fun (Ljava/lang/String;Ljava/lang/String;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/InvalidParameterException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun ()V
+ public fun (Ljava/lang/String;Ljava/lang/Throwable;)V
+ public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/InvalidPasswordException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/LimitExceededException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/MFAMethodNotFoundException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/ParseTokenException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun ()V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/PasswordResetRequiredException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/ResourceNotFoundException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/RevokeTokenException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/SoftwareTokenMFANotFoundException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/TooManyRequestsException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/UserCancelledException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/String;Ljava/lang/String;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/UserLambdaValidationException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/String;Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/UserNotConfirmedException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/UserNotFoundException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public class com/amplifyframework/auth/cognito/exceptions/service/UsernameExistsException : com/amplifyframework/auth/exceptions/ServiceException {
+ public fun (Ljava/lang/Throwable;)V
+}
+
+public final class com/amplifyframework/auth/cognito/helpers/FlutterFactory {
+ public static final field INSTANCE Lcom/amplifyframework/auth/cognito/helpers/FlutterFactory;
+ public final fun createAWSCognitoAuthSession (ZLcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;)Lcom/amplifyframework/auth/cognito/AWSCognitoAuthSession;
+ public final fun createAWSCognitoUserPoolTokens (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/amplifyframework/auth/AWSCognitoUserPoolTokens;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions : com/amplifyframework/auth/options/AuthConfirmResetPasswordOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthConfirmResetPasswordOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthConfirmResetPasswordOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthConfirmResetPasswordOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmResetPasswordOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions : com/amplifyframework/auth/options/AuthConfirmSignInOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun component2 ()Ljava/util/List;
+ public final fun component3 ()Ljava/lang/String;
+ public final fun copy (Ljava/util/Map;Ljava/util/List;Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getFriendlyDeviceName ()Ljava/lang/String;
+ public final fun getMetadata ()Ljava/util/Map;
+ public final fun getUserAttributes ()Ljava/util/List;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthConfirmSignInOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthConfirmSignInOptions;
+ public final fun friendlyDeviceName (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthConfirmSignInOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
+ public final fun userAttributes (Ljava/util/List;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions : com/amplifyframework/auth/options/AuthConfirmSignUpOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getClientMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthConfirmSignUpOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthConfirmSignUpOptions;
+ public final fun clientMetadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$CognitoBuilder;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthConfirmSignUpOptions$Builder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions : com/amplifyframework/auth/options/AuthResendSignUpCodeOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthResendSignUpCodeOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthResendSignUpCodeOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthResendSignUpCodeOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions : com/amplifyframework/auth/options/AuthResendUserAttributeConfirmationCodeOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthResendUserAttributeConfirmationCodeOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthResendUserAttributeConfirmationCodeOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthResendUserAttributeConfirmationCodeOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendUserAttributeConfirmationCodeOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions : com/amplifyframework/auth/options/AuthResetPasswordOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthResetPasswordOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthResetPasswordOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthResetPasswordOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResetPasswordOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions : com/amplifyframework/auth/options/AuthSignInOptions {
+ public static fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getAuthFlowType ()Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthSignInOptions$Builder {
+ public fun ()V
+ public fun authFlowType (Lcom/amplifyframework/auth/cognito/options/AuthFlowType;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthSignInOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthSignInOptions$Builder;
+ public fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions : com/amplifyframework/auth/options/AuthSignOutOptions {
+ public static fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions$CognitoBuilder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getBrowserPackage ()Ljava/lang/String;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthSignOutOptions$Builder {
+ public fun ()V
+ public fun browserPackage (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions$CognitoBuilder;
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthSignOutOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthSignOutOptions$Builder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions : com/amplifyframework/auth/options/AuthSignUpOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$CognitoBuilder;
+ public final fun component2 ()Ljava/util/Map;
+ public final fun component3 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getClientMetadata ()Ljava/util/Map;
+ public final fun getValidationData ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthSignUpOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthSignUpOptions;
+ public final fun clientMetadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$CognitoBuilder;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthSignUpOptions$Builder;
+ public final fun validationData (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignUpOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions : com/amplifyframework/auth/options/AuthUpdateUserAttributeOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthUpdateUserAttributeOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthUpdateUserAttributeOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthUpdateUserAttributeOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributeOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions : com/amplifyframework/auth/options/AuthUpdateUserAttributesOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/util/Map;
+ public final fun copy (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions;Ljava/util/Map;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getMetadata ()Ljava/util/Map;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthUpdateUserAttributesOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthUpdateUserAttributesOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthUpdateUserAttributesOptions$Builder;
+ public final fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthUpdateUserAttributesOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions : com/amplifyframework/auth/options/AuthVerifyTOTPSetupOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$Companion;
+ public synthetic fun (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$CognitoBuilder;
+ public final fun getFriendlyDeviceName ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthVerifyTOTPSetupOptions$Builder {
+ public fun ()V
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthVerifyTOTPSetupOptions;
+ public final fun friendlyDeviceName (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$CognitoBuilder;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthVerifyTOTPSetupOptions$Builder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthVerifyTOTPSetupOptions;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions : com/amplifyframework/auth/options/AuthWebUISignInOptions {
+ public static fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions$CognitoBuilder;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getBrowserPackage ()Ljava/lang/String;
+ public fun getIdpIdentifier ()Ljava/lang/String;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions$CognitoBuilder : com/amplifyframework/auth/options/AuthWebUISignInOptions$Builder {
+ public fun ()V
+ public fun browserPackage (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions$CognitoBuilder;
+ public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions;
+ public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthWebUISignInOptions;
+ public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions$CognitoBuilder;
+ public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthWebUISignInOptions$Builder;
+ public fun idpIdentifier (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthWebUISignInOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/AuthFlowType : java/lang/Enum {
+ public static final field CUSTOM_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public static final field CUSTOM_AUTH_WITHOUT_SRP Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public static final field CUSTOM_AUTH_WITH_SRP Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public static final field USER_PASSWORD_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public static final field USER_SRP_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+ public static fun values ()[Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
+}
+
+public final class com/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions {
+ public static final field Companion Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions$Companion;
+ public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions$CognitoBuilder;
+ public final fun component1 ()Ljava/lang/String;
+ public final fun copy (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;Ljava/lang/String;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getDeveloperProvidedIdentityId ()Ljava/lang/String;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions$CognitoBuilder {
+ public fun ()V
+ public final fun build ()Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;
+ public final fun developerProvidedIdentityId (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions$CognitoBuilder;
+}
+
+public final class com/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions$Companion {
+ public final fun builder ()Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions$CognitoBuilder;
+ public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;
+}
+
+public abstract class com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult : com/amplifyframework/auth/result/AuthSignOutResult {
+ public abstract fun getSignedOutLocally ()Z
+}
+
+public final class com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$CompleteSignOut : com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult {
+ public static final field INSTANCE Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$CompleteSignOut;
+ public fun getSignedOutLocally ()Z
+}
+
+public final class com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$FailedSignOut : com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult {
+ public final fun component1 ()Lcom/amplifyframework/auth/AuthException;
+ public final fun copy (Lcom/amplifyframework/auth/AuthException;)Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$FailedSignOut;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$FailedSignOut;Lcom/amplifyframework/auth/AuthException;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$FailedSignOut;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getException ()Lcom/amplifyframework/auth/AuthException;
+ public fun getSignedOutLocally ()Z
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$PartialSignOut : com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult {
+ public fun ()V
+ public final fun component1 ()Lcom/amplifyframework/auth/cognito/result/HostedUIError;
+ public final fun component2 ()Lcom/amplifyframework/auth/cognito/result/GlobalSignOutError;
+ public final fun component3 ()Lcom/amplifyframework/auth/cognito/result/RevokeTokenError;
+ public final fun copy (Lcom/amplifyframework/auth/cognito/result/HostedUIError;Lcom/amplifyframework/auth/cognito/result/GlobalSignOutError;Lcom/amplifyframework/auth/cognito/result/RevokeTokenError;)Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$PartialSignOut;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$PartialSignOut;Lcom/amplifyframework/auth/cognito/result/HostedUIError;Lcom/amplifyframework/auth/cognito/result/GlobalSignOutError;Lcom/amplifyframework/auth/cognito/result/RevokeTokenError;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult$PartialSignOut;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getGlobalSignOutError ()Lcom/amplifyframework/auth/cognito/result/GlobalSignOutError;
+ public final fun getHostedUIError ()Lcom/amplifyframework/auth/cognito/result/HostedUIError;
+ public final fun getRevokeTokenError ()Lcom/amplifyframework/auth/cognito/result/RevokeTokenError;
+ public fun getSignedOutLocally ()Z
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/result/FederateToIdentityPoolResult {
+ public final fun component1 ()Ljava/lang/String;
+ public final fun component2 ()Lcom/amplifyframework/auth/AWSTemporaryCredentials;
+ public final fun copy (Ljava/lang/String;Lcom/amplifyframework/auth/AWSTemporaryCredentials;)Lcom/amplifyframework/auth/cognito/result/FederateToIdentityPoolResult;
+ public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/result/FederateToIdentityPoolResult;Ljava/lang/String;Lcom/amplifyframework/auth/AWSTemporaryCredentials;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/result/FederateToIdentityPoolResult;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getCredentials ()Lcom/amplifyframework/auth/AWSTemporaryCredentials;
+ public final fun getIdentityId ()Ljava/lang/String;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/result/GlobalSignOutError {
+ public final fun getAccessToken ()Ljava/lang/String;
+ public final fun getException ()Lcom/amplifyframework/auth/cognito/exceptions/service/GlobalSignOutException;
+}
+
+public final class com/amplifyframework/auth/cognito/result/HostedUIError {
+ public final fun getException ()Ljava/lang/Exception;
+ public final fun getUrl ()Ljava/lang/String;
+}
+
+public final class com/amplifyframework/auth/cognito/result/RevokeTokenError {
+ public final fun getException ()Lcom/amplifyframework/auth/cognito/exceptions/service/RevokeTokenException;
+ public final fun getRefreshToken ()Ljava/lang/String;
+}
+
diff --git a/aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPlugin.kt b/aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPlugin.kt
index 84a307b8b6..90a1ce6043 100644
--- a/aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPlugin.kt
+++ b/aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPlugin.kt
@@ -27,6 +27,7 @@ import aws.sdk.kotlin.services.cognitoidentityprovider.model.AttributeType
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ChallengeNameType
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ChangePasswordRequest
import aws.sdk.kotlin.services.cognitoidentityprovider.model.DeviceRememberedStatusType
+import aws.sdk.kotlin.services.cognitoidentityprovider.model.ForgetDeviceRequest
import aws.sdk.kotlin.services.cognitoidentityprovider.model.GetUserAttributeVerificationCodeRequest
import aws.sdk.kotlin.services.cognitoidentityprovider.model.GetUserRequest
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ListDevicesRequest
@@ -1291,16 +1292,21 @@ internal class RealAWSCognitoAuthPlugin(
onError: Consumer
) {
authStateMachine.getCurrentState { authState ->
- when (val authState = authState.authNState) {
+ when (val authNState = authState.authNState) {
is AuthenticationState.SignedIn -> {
- if (device.id.isEmpty()) {
- GlobalScope.launch {
- val deviceKey = authEnvironment.getDeviceMetadata(authState.signedInData.username)
- ?.deviceKey
- updateDevice(deviceKey, DeviceRememberedStatusType.NotRemembered, onSuccess, onError)
+ GlobalScope.launch {
+ try {
+ if (device.id.isEmpty()) {
+ val deviceKey = authEnvironment.getDeviceMetadata(authNState.signedInData.username)
+ ?.deviceKey
+ forgetDevice(deviceKey)
+ } else {
+ forgetDevice(device.id)
+ }
+ onSuccess.call()
+ } catch (e: Exception) {
+ onError.accept(CognitoAuthExceptionConverter.lookup(e, "Failed to forget device."))
}
- } else {
- updateDevice(device.id, DeviceRememberedStatusType.NotRemembered, onSuccess, onError)
}
}
is AuthenticationState.SignedOut -> {
@@ -1313,6 +1319,16 @@ internal class RealAWSCognitoAuthPlugin(
}
}
+ private suspend fun forgetDevice(alternateDeviceId: String?) {
+ val tokens = getSession().userPoolTokensResult
+ authEnvironment.cognitoAuthService.cognitoIdentityProviderClient?.forgetDevice(
+ ForgetDeviceRequest.invoke {
+ accessToken = tokens.value?.accessToken
+ deviceKey = alternateDeviceId
+ }
+ )
+ }
+
override fun fetchDevices(
onSuccess: Consumer>,
onError: Consumer
@@ -1342,12 +1358,14 @@ internal class RealAWSCognitoAuthPlugin(
accessToken = tokens.value?.accessToken
}
)
- val _devices = response?.devices
- val authdeviceList = mutableListOf()
- _devices?.forEach {
- authdeviceList.add(AuthDevice.fromId(it.deviceKey ?: ""))
- }
- onSuccess.accept(authdeviceList)
+
+ val devices = response?.devices?.map { device ->
+ val id = device.deviceKey ?: ""
+ val name = device.deviceAttributes?.find { it.name == "device_name" }?.value
+ AuthDevice.fromId(id, name)
+ } ?: emptyList()
+
+ onSuccess.accept(devices)
} catch (e: Exception) {
onError.accept(CognitoAuthExceptionConverter.lookup(e, "Fetch devices failed."))
}
diff --git a/aws-auth-cognito/src/test/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPluginTest.kt b/aws-auth-cognito/src/test/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPluginTest.kt
index 032082aab6..ff681d4761 100644
--- a/aws-auth-cognito/src/test/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPluginTest.kt
+++ b/aws-auth-cognito/src/test/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPluginTest.kt
@@ -29,8 +29,11 @@ import aws.sdk.kotlin.services.cognitoidentityprovider.model.ConfirmForgotPasswo
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ConfirmSignUpRequest
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ConfirmSignUpResponse
import aws.sdk.kotlin.services.cognitoidentityprovider.model.DeliveryMediumType
+import aws.sdk.kotlin.services.cognitoidentityprovider.model.DeviceType
+import aws.sdk.kotlin.services.cognitoidentityprovider.model.ForgetDeviceResponse
import aws.sdk.kotlin.services.cognitoidentityprovider.model.GetUserAttributeVerificationCodeResponse
import aws.sdk.kotlin.services.cognitoidentityprovider.model.GetUserResponse
+import aws.sdk.kotlin.services.cognitoidentityprovider.model.ListDevicesResponse
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ResendConfirmationCodeRequest
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ResendConfirmationCodeResponse
import aws.sdk.kotlin.services.cognitoidentityprovider.model.SetUserMfaPreferenceRequest
@@ -46,6 +49,7 @@ import aws.sdk.kotlin.services.cognitoidentityprovider.model.VerifySoftwareToken
import aws.sdk.kotlin.services.cognitoidentityprovider.model.VerifySoftwareTokenResponseType
import aws.sdk.kotlin.services.cognitoidentityprovider.model.VerifyUserAttributeResponse
import com.amplifyframework.auth.AuthCodeDeliveryDetails
+import com.amplifyframework.auth.AuthDevice
import com.amplifyframework.auth.AuthException
import com.amplifyframework.auth.AuthSession
import com.amplifyframework.auth.AuthUserAttribute
@@ -63,6 +67,7 @@ import com.amplifyframework.auth.cognito.options.AWSCognitoAuthVerifyTOTPSetupOp
import com.amplifyframework.auth.cognito.options.AuthFlowType
import com.amplifyframework.auth.cognito.usecases.ResetPasswordUseCase
import com.amplifyframework.auth.exceptions.InvalidStateException
+import com.amplifyframework.auth.exceptions.SignedOutException
import com.amplifyframework.auth.options.AuthConfirmResetPasswordOptions
import com.amplifyframework.auth.options.AuthConfirmSignUpOptions
import com.amplifyframework.auth.options.AuthResendSignUpCodeOptions
@@ -83,12 +88,14 @@ import com.amplifyframework.logging.Logger
import com.amplifyframework.statemachine.codegen.data.AmplifyCredential
import com.amplifyframework.statemachine.codegen.data.AuthConfiguration
import com.amplifyframework.statemachine.codegen.data.CognitoUserPoolTokens
+import com.amplifyframework.statemachine.codegen.data.DeviceMetadata
import com.amplifyframework.statemachine.codegen.data.SignInMethod
import com.amplifyframework.statemachine.codegen.data.SignedInData
import com.amplifyframework.statemachine.codegen.data.UserPoolConfiguration
import com.amplifyframework.statemachine.codegen.states.AuthState
import com.amplifyframework.statemachine.codegen.states.AuthenticationState
import com.amplifyframework.statemachine.codegen.states.AuthorizationState
+import featureTest.utilities.APICaptorFactory.Companion.onError
import io.mockk.coEvery
import io.mockk.coJustRun
import io.mockk.coVerify
@@ -155,17 +162,7 @@ class RealAWSCognitoAuthPluginTest {
every { getPinpointEndpointId() } returns expectedEndpointId
}
- private var currentState: AuthenticationState = AuthenticationState.Configured()
-
- private var authStateMachine = mockk(relaxed = true) {
- every { getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(
- mockk {
- every { authNState } returns currentState
- }
- )
- }
- }
+ private var authStateMachine = mockk(relaxed = true)
private lateinit var plugin: RealAWSCognitoAuthPlugin
@@ -193,6 +190,16 @@ class RealAWSCognitoAuthPluginTest {
mockkObject(SRPHelper)
mockkObject(AuthHelper)
coEvery { AuthHelper.getSecretHash(any(), any(), any()) } returns "dummy Hash"
+
+ setupCurrentAuthState(
+ authNState = AuthenticationState.SignedIn(
+ mockk {
+ every { username } returns "username"
+ },
+ mockk()
+ ),
+ authZState = AuthorizationState.SessionEstablished(credentials)
+ )
}
@Test
@@ -201,7 +208,8 @@ class RealAWSCognitoAuthPluginTest {
val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
val expectedAuthError = InvalidUserPoolConfigurationException()
- currentState = AuthenticationState.NotConfigured()
+
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
plugin.signUp("user", "pass", AuthSignUpOptions.builder().build(), onSuccess, onError)
@@ -216,13 +224,11 @@ class RealAWSCognitoAuthPluginTest {
// GIVEN
val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedOut(mockk())
- every { authZState } returns AuthorizationState.Configured()
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+
+ setupCurrentAuthState(
+ authNState = AuthenticationState.SignedOut(mockk()),
+ authZState = AuthorizationState.Configured()
+ )
// WHEN
plugin.fetchAuthSession(onSuccess, onError)
@@ -236,12 +242,8 @@ class RealAWSCognitoAuthPluginTest {
// GIVEN
val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedOut(mockk())
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+
+ setupCurrentAuthState(authNState = AuthenticationState.SignedOut(mockk()))
// WHEN
plugin.signIn(
@@ -262,7 +264,8 @@ class RealAWSCognitoAuthPluginTest {
val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
val expectedAuthError = InvalidUserPoolConfigurationException()
- currentState = AuthenticationState.NotConfigured()
+
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
plugin.confirmSignUp("user", "pass", AuthConfirmSignUpOptions.defaults(), onSuccess, onError)
@@ -278,7 +281,8 @@ class RealAWSCognitoAuthPluginTest {
val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
val expectedAuthError = InvalidUserPoolConfigurationException()
- currentState = AuthenticationState.NotConfigured()
+
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
coEvery { authConfiguration.authFlowType } returns AuthFlowType.USER_SRP_AUTH
// WHEN
@@ -292,114 +296,77 @@ class RealAWSCognitoAuthPluginTest {
@Test
fun testSignInFailsIfAlreadySignedIn() {
// GIVEN
- val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
coEvery { authConfiguration.authFlowType } returns AuthFlowType.USER_SRP_AUTH
- currentState = AuthenticationState.SignedIn(
- SignedInData(
- "userId",
- "user",
- Date(),
- SignInMethod.ApiBased(SignInMethod.ApiBased.AuthType.USER_SRP_AUTH),
- CognitoUserPoolTokens("", "", "", 0)
- ),
- mockk()
+
+ setupCurrentAuthState(
+ authNState = AuthenticationState.SignedIn(
+ SignedInData(
+ "userId",
+ "user",
+ Date(),
+ SignInMethod.ApiBased(SignInMethod.ApiBased.AuthType.USER_SRP_AUTH),
+ CognitoUserPoolTokens("", "", "", 0)
+ ),
+ mockk()
+ )
)
// WHEN
- plugin.signIn("user", "password", AuthSignInOptions.defaults(), onSuccess, onError)
+ plugin.signIn("user", "password", AuthSignInOptions.defaults(), mockk(), onError)
// THEN
- verify(exactly = 0) { onSuccess.accept(any()) }
verify { onError.accept(any()) }
}
@Test
fun testResendSignUpCodeFailsIfNotConfigured() {
// GIVEN
- val onSuccess = mockk>()
val onError = mockk>(relaxed = true)
val expectedAuthError = InvalidUserPoolConfigurationException()
- currentState = AuthenticationState.NotConfigured()
+
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
- plugin.resendSignUpCode("user", AuthResendSignUpCodeOptions.defaults(), onSuccess, onError)
+ plugin.resendSignUpCode("user", AuthResendSignUpCodeOptions.defaults(), mockk(), onError)
// THEN
- verify(exactly = 0) { onSuccess.accept(any()) }
verify { onError.accept(expectedAuthError) }
}
@Test
fun `update password with success`() {
// GIVEN
- val latch = CountDownLatch(1)
- val onSuccess = mockk {
- every { call() } answers { latch.countDown() }
- }
- val onError = mockk>(relaxed = true)
-
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedIn(mockk(), mockk())
- every { authZState } returns AuthorizationState.SessionEstablished(credentials)
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+ val onSuccess = ActionWithLatch()
coEvery {
authService.cognitoIdentityProviderClient?.changePassword(any())
} returns ChangePasswordResponse.invoke { }
// WHEN
- plugin.updatePassword("old", "new", onSuccess, onError)
+ plugin.updatePassword("old", "new", onSuccess, mockk())
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
-
- verify { onSuccess.call() }
- coVerify(exactly = 0) { onError.accept(any()) }
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
}
@Test
fun `update password fails when not in SignedIn state`() {
// GIVEN
- val onSuccess = mockk(relaxed = true)
- val latch = CountDownLatch(1)
- val onError = mockk> {
- every { accept(InvalidStateException()) } answers { latch.countDown() }
- }
+ val onError = ConsumerWithLatch(expect = InvalidStateException())
- currentState = AuthenticationState.NotConfigured()
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
- plugin.updatePassword("old", "new", onSuccess, onError)
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
-
- verify(exactly = 0) { onSuccess.call() }
- verify { onError.accept(InvalidStateException()) }
+ plugin.updatePassword("old", "new", mockk(), onError)
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
}
@Test
- @Ignore("fix use case")
fun `update password fails when cognitoIdentityProviderClient not set`() {
- val onSuccess = mockk(relaxed = true)
- val latch = CountDownLatch(1)
- val onError = mockk> {
- every { accept(any()) } answers { latch.countDown() }
- }
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedIn(mockk(), mockk())
- every { authZState } returns AuthorizationState.SessionEstablished(credentials)
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
-
- plugin.updatePassword("old", "new", onSuccess, onError)
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
+ val onError = ConsumerWithLatch()
- verify(exactly = 0) { onSuccess.call() }
- coVerify { onError.accept(any()) }
+ plugin.updatePassword("old", "new", mockk(), onError)
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
}
@Test
@@ -476,17 +443,7 @@ class RealAWSCognitoAuthPluginTest {
@Test
fun `fetch user attributes with success`() {
// GIVEN
- val onSuccess = mockk>>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedIn(mockk(), mockk())
- every { authZState } returns AuthorizationState.SessionEstablished(credentials)
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+ val onSuccess = ConsumerWithLatch>()
val userAttributes = listOf(
AttributeType.invoke {
@@ -515,62 +472,41 @@ class RealAWSCognitoAuthPluginTest {
username = ""
}
- every {
- onSuccess.accept(expectedResult.toMutableList())
- } answers {
- listenLatch.countDown()
- }
-
// WHEN
- plugin.fetchUserAttributes(onSuccess, onError)
+ plugin.fetchUserAttributes(onSuccess, mockk())
- assertTrue { listenLatch.await(5, TimeUnit.SECONDS) }
- coVerify(exactly = 1) { onSuccess.accept(expectedResult.toMutableList()) }
- coVerify(exactly = 0) { onError.accept(any()) }
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
+ assertEquals(expectedResult, onSuccess.captured)
}
@Test
fun `fetch user attributes fails when not in SignedIn state`() {
// GIVEN
- val onSuccess = mockk>>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- currentState = AuthenticationState.NotConfigured()
+ val onError = ConsumerWithLatch(expect = InvalidStateException())
- every {
- onError.accept(InvalidStateException())
- } answers {
- listenLatch.countDown()
- }
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
- plugin.fetchUserAttributes(onSuccess, onError)
+ plugin.fetchUserAttributes(mockk(), onError)
- assertTrue { listenLatch.await(5, TimeUnit.SECONDS) }
- coVerify(exactly = 1) { onError.accept(InvalidStateException()) }
- verify(exactly = 0) { onSuccess.accept(any()) }
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
}
@Test
fun `confirmResetPassword fails if authentication state is NotConfigured`() {
// Given
- val latch = CountDownLatch(1)
- currentState = AuthenticationState.NotConfigured()
- val onSuccess = mockk { every { call() } answers { latch.countDown() } }
- val onError = mockk> { every { accept(any()) } answers { latch.countDown() } }
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
val expectedError = AuthException(
"Confirm Reset Password failed.",
"Cognito User Pool not configured. Please check amplifyconfiguration.json file."
)
+ val onError = ConsumerWithLatch(expect = expectedError)
// When
- plugin.confirmResetPassword("user", "pass", "code", mockk(), onSuccess, onError)
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
+ plugin.confirmResetPassword("user", "pass", "code", mockk(), mockk(), onError)
// Then
- verify(exactly = 0) { onSuccess.call() }
- verify { onError.accept(expectedError) }
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
}
@Test
@@ -622,11 +558,7 @@ class RealAWSCognitoAuthPluginTest {
@Test
fun `onSuccess is called when confirmResetPassword call succeeds`() {
// GIVEN
- val latch = CountDownLatch(1)
- val onSuccess = mockk {
- every { call() } answers { latch.countDown() }
- }
- val onError = mockk>()
+ val onSuccess = ActionWithLatch()
val user = "username"
val pass = "passworD"
val code = "007"
@@ -636,20 +568,16 @@ class RealAWSCognitoAuthPluginTest {
}
// WHEN
- plugin.confirmResetPassword(user, pass, code, AuthConfirmResetPasswordOptions.defaults(), onSuccess, onError)
+ plugin.confirmResetPassword(user, pass, code, AuthConfirmResetPasswordOptions.defaults(), onSuccess, mockk())
// THEN
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
- verify(exactly = 0) { onError.accept(any()) }
- verify(exactly = 1) { onSuccess.call() }
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
}
@Test
fun `AuthException is thrown when confirmForgotPassword API call fails`() {
// GIVEN
- val latch = CountDownLatch(1)
- val onSuccess = mockk()
- val onError = mockk>()
+ val onError = ConsumerWithLatch()
val user = "username"
val pass = "passworD"
@@ -660,29 +588,22 @@ class RealAWSCognitoAuthPluginTest {
throw expectedException
}
- val resultCaptor = slot()
- every { onError.accept(capture(resultCaptor)) } answers { latch.countDown() }
-
// WHEN
- plugin.confirmResetPassword(user, pass, code, AuthConfirmResetPasswordOptions.defaults(), onSuccess, onError)
+ plugin.confirmResetPassword(user, pass, code, AuthConfirmResetPasswordOptions.defaults(), mockk(), onError)
// THEN
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
- verify(exactly = 0) { onSuccess.call() }
- verify { onError.accept(resultCaptor.captured) }
-
- assertEquals(expectedException, resultCaptor.captured.cause)
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
+ assertEquals(expectedException, onError.captured.cause)
}
@Test
fun `test signup API with given arguments and auth signed in`() {
- currentState = AuthenticationState.SignedIn(mockk(), mockk())
`test signup API with given arguments`()
}
@Test
fun `test signup API with given arguments and auth signed out`() {
- currentState = AuthenticationState.SignedOut(mockk())
+ setupCurrentAuthState(authNState = AuthenticationState.SignedOut(mockk()))
`test signup API with given arguments`()
}
@@ -726,21 +647,15 @@ class RealAWSCognitoAuthPluginTest {
@Test
fun `test signup success`() {
- val latch = CountDownLatch(1)
-
// GIVEN
- val onSuccess = mockk>()
- val onError = mockk>()
+ val onSuccess = ConsumerWithLatch()
val userId = "123456"
val username = "user"
val password = "password"
val email = "user@domain.com"
val options = AuthSignUpOptions.builder().userAttribute(AuthUserAttributeKey.email(), email).build()
- val resultCaptor = slot()
- every { onSuccess.accept(capture(resultCaptor)) } answers { latch.countDown() }
-
- currentState = AuthenticationState.SignedOut(mockk())
+ setupCurrentAuthState(authNState = AuthenticationState.SignedOut(mockk()))
val deliveryDetails = mapOf(
"DESTINATION" to email,
@@ -774,23 +689,21 @@ class RealAWSCognitoAuthPluginTest {
}
// WHEN
- plugin.signUp(username, password, options, onSuccess, onError)
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
+ plugin.signUp(username, password, options, onSuccess, mockk())
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
// THEN
- verify(exactly = 0) { onError.accept(any()) }
- verify(exactly = 1) { onSuccess.accept(expectedAuthSignUpResult) }
+ assertEquals(expectedAuthSignUpResult, onSuccess.captured)
}
@Test
fun `test confirm signup API with given arguments and auth signed in`() {
- currentState = AuthenticationState.SignedIn(mockk(), mockk())
`test confirm signup API with given arguments`()
}
@Test
fun `test confirm signup API with given arguments and auth signed out`() {
- currentState = AuthenticationState.SignedOut(mockk())
+ setupCurrentAuthState(authNState = AuthenticationState.SignedOut(mockk()))
`test confirm signup API with given arguments`()
}
@@ -839,7 +752,7 @@ class RealAWSCognitoAuthPluginTest {
val resultCaptor = slot()
every { onSuccess.accept(capture(resultCaptor)) } answers { latch.countDown() }
- currentState = AuthenticationState.SignedOut(mockk())
+ setupCurrentAuthState(authNState = AuthenticationState.SignedOut(mockk()))
val expectedAuthSignUpResult = AuthSignUpResult(
true,
@@ -862,13 +775,12 @@ class RealAWSCognitoAuthPluginTest {
@Test
fun `test resend signup code API with given arguments and auth signed out`() {
- currentState = AuthenticationState.SignedOut(mockk())
+ setupCurrentAuthState(AuthenticationState.SignedOut(mockk()))
`test resend signup code API with given arguments`()
}
@Test
fun `test resend signup code API with given arguments and auth signed in`() {
- currentState = AuthenticationState.SignedIn(mockk(), mockk())
`test resend signup code API with given arguments`()
}
@@ -908,17 +820,11 @@ class RealAWSCognitoAuthPluginTest {
@Test
fun `test resend signup code success`() {
- val latch = CountDownLatch(1)
-
// GIVEN
- val onSuccess = mockk>()
- val onError = mockk>()
+ val onSuccess = ConsumerWithLatch()
val username = "user"
- val resultCaptor = slot()
- every { onSuccess.accept(capture(resultCaptor)) } answers { latch.countDown() }
-
- currentState = AuthenticationState.SignedOut(mockk())
+ setupCurrentAuthState(authNState = AuthenticationState.SignedOut(mockk()))
val deliveryDetails = mapOf(
"DESTINATION" to "destination",
@@ -944,48 +850,35 @@ class RealAWSCognitoAuthPluginTest {
// WHEN
plugin.resendSignUpCode(username, AuthResendSignUpCodeOptions.defaults(), onSuccess, onError)
- assertTrue { latch.await(5, TimeUnit.SECONDS) }
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
// THEN
- verify(exactly = 0) { onError.accept(any()) }
- verify(exactly = 1) { onSuccess.accept(expectedCodeDeliveryDetails) }
+ assertEquals(expectedCodeDeliveryDetails, onSuccess.captured)
}
@Test
fun `update user attribute fails when not in SignedIn state`() {
// GIVEN
- val onSuccess = mockk>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- currentState = AuthenticationState.NotConfigured()
+ val onError = ConsumerWithLatch(expect = InvalidStateException())
- val resultCaptor = slot()
- every { onError.accept(capture(resultCaptor)) } answers { listenLatch.countDown() }
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
plugin.updateUserAttribute(
AuthUserAttribute(AuthUserAttributeKey.email(), "test@test.com"),
- onSuccess,
+ mockk(),
onError
)
- assertTrue { listenLatch.await(5, TimeUnit.SECONDS) }
- verify(exactly = 1) { onError.accept(resultCaptor.captured) }
- verify(exactly = 0) { onSuccess.accept(any()) }
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
}
@Test
fun `update user attributes fails when not in SignedIn state`() {
// GIVEN
- val onSuccess = mockk>>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- currentState = AuthenticationState.NotConfigured()
+ val onError = ConsumerWithLatch(expect = InvalidStateException())
- val resultCaptor = slot()
- every { onError.accept(capture(resultCaptor)) } answers { listenLatch.countDown() }
+ setupCurrentAuthState(authNState = AuthenticationState.NotConfigured())
// WHEN
plugin.updateUserAttributes(
@@ -994,42 +887,21 @@ class RealAWSCognitoAuthPluginTest {
AuthUserAttribute(AuthUserAttributeKey.nickname(), "test")
),
AuthUpdateUserAttributesOptions.defaults(),
- onSuccess,
+ mockk(),
onError
)
- assertTrue { listenLatch.await(5, TimeUnit.SECONDS) }
- verify(exactly = 1) { onError.accept(resultCaptor.captured) }
- verify(exactly = 0) { onSuccess.accept(any()) }
+ assertTrue { onError.latch.await(5, TimeUnit.SECONDS) }
}
@Test
fun `update single user attribute with no attribute options and delivery code success`() {
// GIVEN
- val onSuccess = mockk>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedIn(mockk(), mockk())
- every { authZState } returns AuthorizationState.SessionEstablished(credentials)
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+ val onSuccess = ConsumerWithLatch()
coEvery {
authService.cognitoIdentityProviderClient?.updateUserAttributes(any())
- } returns UpdateUserAttributesResponse.invoke {
- }
-
- val slot = slot()
-
- every {
- onSuccess.accept(capture(slot))
- } answers {
- listenLatch.countDown()
- }
+ } returns UpdateUserAttributesResponse.invoke {}
// WHEN
plugin.updateUserAttribute(
@@ -1038,46 +910,25 @@ class RealAWSCognitoAuthPluginTest {
onError
)
- assertTrue { listenLatch.await(5, TimeUnit.SECONDS) }
- coVerify(exactly = 1) { onSuccess.accept(slot.captured) }
- assertTrue(slot.captured.isUpdated, "attribute should be successfully updated")
- assertNotNull(slot.captured.nextStep, "next step should not be null")
- assertNull(slot.captured.nextStep.codeDeliveryDetails, "code delivery details should be null")
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
+ assertTrue(onSuccess.captured.isUpdated, "attribute should be successfully updated")
+ assertNotNull(onSuccess.captured.nextStep, "next step should not be null")
+ assertNull(onSuccess.captured.nextStep.codeDeliveryDetails, "code delivery details should be null")
assertEquals(
- slot.captured.nextStep.updateAttributeStep,
+ onSuccess.captured.nextStep.updateAttributeStep,
AuthUpdateAttributeStep.DONE,
"next step should be done"
)
- coVerify(exactly = 0) { onError.accept(any()) }
}
@Test
fun `update single user attribute with attribute options and no delivery code success`() {
// GIVEN
- val onSuccess = mockk>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedIn(mockk(), mockk())
- every { authZState } returns AuthorizationState.SessionEstablished(credentials)
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+ val onSuccess = ConsumerWithLatch()
coEvery {
authService.cognitoIdentityProviderClient?.updateUserAttributes(any())
- } returns UpdateUserAttributesResponse.invoke {
- }
-
- val slot = slot()
-
- every {
- onSuccess.accept(capture(slot))
- } answers {
- listenLatch.countDown()
- }
+ } returns UpdateUserAttributesResponse.invoke {}
val builder = AWSCognitoAuthUpdateUserAttributeOptions.builder().metadata(
mapOf("x" to "x", "y" to "y", "z" to "z")
@@ -1087,36 +938,24 @@ class RealAWSCognitoAuthPluginTest {
AuthUserAttribute(AuthUserAttributeKey.email(), "test@test.com"),
builder.build(),
onSuccess,
- onError
+ mockk()
)
- assertTrue { listenLatch.await(5, TimeUnit.SECONDS) }
- coVerify(exactly = 1) { onSuccess.accept(slot.captured) }
- assertTrue(slot.captured.isUpdated, "attribute should be successfully updated")
- assertNotNull(slot.captured.nextStep, "next step should not be null")
- assertNull(slot.captured.nextStep.codeDeliveryDetails, "code delivery details should be null")
+ assertTrue { onSuccess.latch.await(5, TimeUnit.SECONDS) }
+ assertTrue(onSuccess.captured.isUpdated, "attribute should be successfully updated")
+ assertNotNull(onSuccess.captured.nextStep, "next step should not be null")
+ assertNull(onSuccess.captured.nextStep.codeDeliveryDetails, "code delivery details should be null")
assertEquals(
- slot.captured.nextStep.updateAttributeStep,
+ onSuccess.captured.nextStep.updateAttributeStep,
AuthUpdateAttributeStep.DONE,
"next step should be done"
)
- coVerify(exactly = 0) { onError.accept(any()) }
}
@Test
fun `update user attributes with delivery code success`() {
// GIVEN
- val onSuccess = mockk>>(relaxed = true)
- val onError = mockk>(relaxed = true)
- val listenLatch = CountDownLatch(1)
-
- val currentAuthState = mockk {
- every { authNState } returns AuthenticationState.SignedIn(mockk(), mockk())
- every { authZState } returns AuthorizationState.SessionEstablished(credentials)
- }
- every { authStateMachine.getCurrentState(captureLambda()) } answers {
- lambda<(AuthState) -> Unit>().invoke(currentAuthState)
- }
+ val onSuccess = ConsumerWithLatch