Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(auth): debounce refreshAuthTokens #12845

Merged
merged 14 commits into from
Jan 18, 2024

Conversation

israx
Copy link
Member

@israx israx commented Jan 12, 2024

Description of changes

The purpose of this PR is to debounce sync concurrent calls to the fetchAuthSession API. This approach is similar to the current debouncing logic implemented in v5

Issue #, if available

Description of how you validated changes

Checklist

  • PR description included
  • yarn test passes
  • Tests are changed or added
  • Relevant documentation is changed or added (and PR referenced)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@israx israx requested review from a team as code owners January 12, 2024 17:09
AllanZhengYP
AllanZhengYP previously approved these changes Jan 12, 2024
Copy link
Member

@AllanZhengYP AllanZhengYP left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good to see timer is removed. Thank you!

@israx israx changed the title chore(auth): debounce fetchAuthSession API chore(auth): debounce refreshAuthTokens Jan 12, 2024
Copy link
Member

@HuiSF HuiSF left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ty for improving the impl.

packages/core/src/utils/deDupCallback.ts Outdated Show resolved Hide resolved
@@ -279,7 +279,7 @@ class SubscriptionProcessor {

try {
// retrieving current token info from Cognito UserPools
const session = await await fetchAuthSession();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😬

packages/core/__tests__/utils/debounceCallback.test.ts Outdated Show resolved Hide resolved
Comment on lines 26 to 36
it('should allow to invoke the callback again after the promise has being resolved', async () => {
const debouncedCallback = debounceCallback(mockServiceCallback);
for (let i = 0; i < numberOfConcurrentCalls; i++) {
debouncedCallback();
}

await debouncedCallback();

debouncedCallback();
expect(mockServiceCallback).toHaveBeenCalledTimes(2);
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test may not be accurate - the mockServiceCallback called times should increase after the promised returned by it resolves, and when debouncedCallback gets called again, but in this test, the mockServiceCallback doesn't even return a promise.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the mockServiceCallback doesn't return a promise but the deDupe function does because it creates a promise on top of the callback passed. What I'm trying to do is to call the deDuped function concurrently and then calling it again when it was able to resolve.

cshfang
cshfang previously approved these changes Jan 16, 2024
package.json Outdated Show resolved Hide resolved
packages/core/src/utils/deDupeAsyncRequests.ts Outdated Show resolved Hide resolved
packages/core/src/utils/deDupeAsyncRequests.ts Outdated Show resolved Hide resolved
packages/core/src/utils/deDupeAsyncRequests.ts Outdated Show resolved Hide resolved
packages/core/__tests__/utils/deDupeAsyncRequests.test.ts Outdated Show resolved Hide resolved
packages/core/__tests__/utils/deDupeAsyncRequests.test.ts Outdated Show resolved Hide resolved
AllanZhengYP
AllanZhengYP previously approved these changes Jan 17, 2024
packages/core/src/utils/deDupeAsyncFunction.ts Outdated Show resolved Hide resolved
packages/core/src/utils/deDupeAsyncFunction.ts Outdated Show resolved Hide resolved
packages/core/src/utils/deDupeAsyncFunction.ts Outdated Show resolved Hide resolved
Copy link
Contributor

@elorzafe elorzafe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good,

nit: why not have a unit for refreshAuthTokens calls are deduped?

@israx israx merged commit 5fc446e into aws-amplify:main Jan 18, 2024
30 checks passed
david-mcafee added a commit that referenced this pull request Jan 18, 2024
david-mcafee added a commit to david-mcafee/amplify-js that referenced this pull request Jan 18, 2024
israx added a commit to israx/amplify-js that referenced this pull request Jan 18, 2024
israx added a commit that referenced this pull request Jan 18, 2024
israx added a commit that referenced this pull request Jan 19, 2024
* Revert "chore(auth): debounce refreshAuthTokens (#12845)"

This reverts commit 5fc446e.

* chore: update workflow
cshfang added a commit that referenced this pull request Feb 5, 2024
* chore(auth): debounce refreshAuthTokens (#12845)

* chore: add debounce callback helper

* chore: add unit tests

* chore: debounce fetchAuthSession

* chore: fix unit test

* chore: fix bundle size limits

* chore: update debounce logic

* chore: update dedup logic

* chore: debounce refreshAuthTokens

* chore: fix bundle size

* chore: address feedback

* chore: fix unit test

* chore: address feedback

* chore: update yarn.lock

* chore: address feedbak

* fix(data): update DataStore to send correct Control Messages when starting (#12861)

* chore(release): Publish [ci skip]

 - @aws-amplify/adapter-nextjs@1.0.13
 - @aws-amplify/analytics@7.0.13
 - @aws-amplify/api@6.0.13
 - @aws-amplify/api-graphql@4.0.13
 - @aws-amplify/api-rest@4.0.13
 - @aws-amplify/auth@6.0.13
 - aws-amplify@6.0.13
 - @aws-amplify/core@6.0.13
 - @aws-amplify/datastore@5.0.13
 - @aws-amplify/datastore-storage-adapter@2.1.13
 - @aws-amplify/geo@3.0.13
 - @aws-amplify/interactions@6.0.13
 - @aws-amplify/notifications@2.0.13
 - @aws-amplify/predictions@6.0.13
 - @aws-amplify/pubsub@6.0.13
 - @aws-amplify/react-native@1.0.13
 - @aws-amplify/react-native-example@0.0.14
 - @aws-amplify/rtn-push-notification@1.2.13
 - @aws-amplify/rtn-web-browser@1.0.13
 - @aws-amplify/storage@6.0.13
 - tsc-compliance-test@0.1.13

* chore(release): update API docs [ci skip]

* chore: enable codecov (#12876)

* docs(auth,analytics): adding in-line docs for public apis (#12882)

* docs(auth,analytics): adding in-line docs for public apis

* fix: unblock the max length lint

* chore(react-native): use react-native 0.71.0 as the dev dep

* fix: Default branch resolution when running E2E tests (#12910)

* fix: Lambda auth config value (#12922)

* chore: renable caching the package list in GH actions

* chore: remove unused codecov package (has been deprecated)

* feat(api): expose HTTP response from API errors (#12835)

---------

Co-authored-by: Hui Zhao <10602282+HuiSF@users.noreply.github.com>
Co-authored-by: Jim Blanchard <jim.l.blanchard@gmail.com>

* chore: temporarily disable codecov GH action integration (#12928)

* ci: run flaky data e2es without retry (#12758)

* ci: run flaky data e2es without retry

* only run on chrome

* restore workflow

---------

Co-authored-by: Aaron S <94858815+stocaaro@users.noreply.github.com>

* fix(core): Amplify.configure dispatches Hub event with unparsed config object (#12930)

* chore(repo): use typescript 5.0.2 across workspace

* chore(repo): refactor tsconfig hierarchy

- move the base tsconfig into the root of the workspace
- unifying tsconfig tsconfig.build tsconfig.test and tsconfig.watch settings

* chore(repo): promote rollup dependencies into workspace

- remove unused build.js script

* chore(repo): add build:watch using rollup

* chore(repo): setup eslint

* chore(adapter-nextjs): migrate to eslint

* fix(repo): test-github-actions using js-yaml already removed API

* chore(repo): add Code Spell Checker to recommended extension list

* chore(repo): add formatOn actions to formattingToggle controlables

* fix: not appending notification configs

* chore(release): Publish [ci skip]

 - @aws-amplify/adapter-nextjs@1.0.14
 - @aws-amplify/analytics@7.0.14
 - @aws-amplify/api@6.0.14
 - @aws-amplify/api-graphql@4.0.14
 - @aws-amplify/api-rest@4.0.14
 - @aws-amplify/auth@6.0.14
 - aws-amplify@6.0.14
 - @aws-amplify/core@6.0.14
 - @aws-amplify/datastore@5.0.14
 - @aws-amplify/datastore-storage-adapter@2.1.14
 - @aws-amplify/geo@3.0.14
 - @aws-amplify/interactions@6.0.14
 - @aws-amplify/notifications@2.0.14
 - @aws-amplify/predictions@6.0.14
 - @aws-amplify/pubsub@6.0.14
 - @aws-amplify/react-native@1.0.14
 - @aws-amplify/react-native-example@0.0.15
 - @aws-amplify/rtn-push-notification@1.2.14
 - @aws-amplify/rtn-web-browser@1.0.14
 - @aws-amplify/storage@6.0.14
 - tsc-compliance-test@0.1.14

* Revert "chore(repo): use typescript 5.0.2 across workspace" (#12941)

* Revert "chore(repo): use typescript 5.0.2 across workspace"

This reverts commit e20782e.

* chore(api-graphql): temporarily install rollup to package

* fix(repo): rollup generated sourcemap has wrong src path (#12947)

* fix(datastore): Treat head as optional to avoid errors (#12936)

* fix(datastore): Treat head as optional to avoid errors

* Add testing and fix follow-on issue

* fix(api-graphql): wrong arguments for GET operation of a CPK model

* fix: Remove special e2e treatment for validated tests (#12946)

fix: Remove special integ treament for validated tests

* fix(datastore): Limit docs integ test to one browser to improve stability (#12937)

* fix(api-graphql): same results returned for queries on the same model with different selection set

- caused by the incomplete GraphQL documents caching

* Update branch to work with merged updates from main

---------

Co-authored-by: israx <70438514+israx@users.noreply.github.com>
Co-authored-by: David McAfee <mcafd@amazon.com>
Co-authored-by: Jim Blanchard <jim.l.blanchard@gmail.com>
Co-authored-by: aws-amplify-bot <aws@amazon.com>
Co-authored-by: Hui Zhao <10602282+HuiSF@users.noreply.github.com>
Co-authored-by: AllanZhengYP <zheallan@amazon.com>
Co-authored-by: Hui Zhao <zhohz@amazon.com>
Co-authored-by: Ivan Artemiev <29709626+iartemiev@users.noreply.github.com>
Co-authored-by: Aaron S <94858815+stocaaro@users.noreply.github.com>
Co-authored-by: ManojNB <manojnb95@gmail.com>
Co-authored-by: ManojNB <manojnb@amazon.com>
Co-authored-by: Francisco Rodriguez <frodriguez.cs@gmail.com>
cshfang added a commit that referenced this pull request Feb 5, 2024
* chore(auth): debounce refreshAuthTokens (#12845)

* chore: add debounce callback helper

* chore: add unit tests

* chore: debounce fetchAuthSession

* chore: fix unit test

* chore: fix bundle size limits

* chore: update debounce logic

* chore: update dedup logic

* chore: debounce refreshAuthTokens

* chore: fix bundle size

* chore: address feedback

* chore: fix unit test

* chore: address feedback

* chore: update yarn.lock

* chore: address feedbak

* fix(data): update DataStore to send correct Control Messages when starting (#12861)

* chore(release): Publish [ci skip]

 - @aws-amplify/adapter-nextjs@1.0.13
 - @aws-amplify/analytics@7.0.13
 - @aws-amplify/api@6.0.13
 - @aws-amplify/api-graphql@4.0.13
 - @aws-amplify/api-rest@4.0.13
 - @aws-amplify/auth@6.0.13
 - aws-amplify@6.0.13
 - @aws-amplify/core@6.0.13
 - @aws-amplify/datastore@5.0.13
 - @aws-amplify/datastore-storage-adapter@2.1.13
 - @aws-amplify/geo@3.0.13
 - @aws-amplify/interactions@6.0.13
 - @aws-amplify/notifications@2.0.13
 - @aws-amplify/predictions@6.0.13
 - @aws-amplify/pubsub@6.0.13
 - @aws-amplify/react-native@1.0.13
 - @aws-amplify/react-native-example@0.0.14
 - @aws-amplify/rtn-push-notification@1.2.13
 - @aws-amplify/rtn-web-browser@1.0.13
 - @aws-amplify/storage@6.0.13
 - tsc-compliance-test@0.1.13

* chore(release): update API docs [ci skip]

* chore: enable codecov (#12876)

* docs(auth,analytics): adding in-line docs for public apis (#12882)

* docs(auth,analytics): adding in-line docs for public apis

* fix: unblock the max length lint

* chore(react-native): use react-native 0.71.0 as the dev dep

* fix: Default branch resolution when running E2E tests (#12910)

* fix: Lambda auth config value (#12922)

* chore: renable caching the package list in GH actions

* chore: remove unused codecov package (has been deprecated)

* feat(api): expose HTTP response from API errors (#12835)

---------

Co-authored-by: Hui Zhao <10602282+HuiSF@users.noreply.github.com>
Co-authored-by: Jim Blanchard <jim.l.blanchard@gmail.com>

* chore: temporarily disable codecov GH action integration (#12928)

* ci: run flaky data e2es without retry (#12758)

* ci: run flaky data e2es without retry

* only run on chrome

* restore workflow

---------

Co-authored-by: Aaron S <94858815+stocaaro@users.noreply.github.com>

* fix(core): Amplify.configure dispatches Hub event with unparsed config object (#12930)

* chore(repo): use typescript 5.0.2 across workspace

* chore(repo): refactor tsconfig hierarchy

- move the base tsconfig into the root of the workspace
- unifying tsconfig tsconfig.build tsconfig.test and tsconfig.watch settings

* chore(repo): promote rollup dependencies into workspace

- remove unused build.js script

* chore(repo): add build:watch using rollup

* chore(repo): setup eslint

* chore(adapter-nextjs): migrate to eslint

* fix(repo): test-github-actions using js-yaml already removed API

* chore(repo): add Code Spell Checker to recommended extension list

* chore(repo): add formatOn actions to formattingToggle controlables

* fix: not appending notification configs

* chore(release): Publish [ci skip]

 - @aws-amplify/adapter-nextjs@1.0.14
 - @aws-amplify/analytics@7.0.14
 - @aws-amplify/api@6.0.14
 - @aws-amplify/api-graphql@4.0.14
 - @aws-amplify/api-rest@4.0.14
 - @aws-amplify/auth@6.0.14
 - aws-amplify@6.0.14
 - @aws-amplify/core@6.0.14
 - @aws-amplify/datastore@5.0.14
 - @aws-amplify/datastore-storage-adapter@2.1.14
 - @aws-amplify/geo@3.0.14
 - @aws-amplify/interactions@6.0.14
 - @aws-amplify/notifications@2.0.14
 - @aws-amplify/predictions@6.0.14
 - @aws-amplify/pubsub@6.0.14
 - @aws-amplify/react-native@1.0.14
 - @aws-amplify/react-native-example@0.0.15
 - @aws-amplify/rtn-push-notification@1.2.14
 - @aws-amplify/rtn-web-browser@1.0.14
 - @aws-amplify/storage@6.0.14
 - tsc-compliance-test@0.1.14

* Revert "chore(repo): use typescript 5.0.2 across workspace" (#12941)

* Revert "chore(repo): use typescript 5.0.2 across workspace"

This reverts commit e20782e.

* chore(api-graphql): temporarily install rollup to package

* fix(repo): rollup generated sourcemap has wrong src path (#12947)

* fix(datastore): Treat head as optional to avoid errors (#12936)

* fix(datastore): Treat head as optional to avoid errors

* Add testing and fix follow-on issue

* fix(api-graphql): wrong arguments for GET operation of a CPK model

* fix: Remove special e2e treatment for validated tests (#12946)

fix: Remove special integ treament for validated tests

* fix(datastore): Limit docs integ test to one browser to improve stability (#12937)

* fix(api-graphql): same results returned for queries on the same model with different selection set

- caused by the incomplete GraphQL documents caching

* Update branch to work with merged updates from main

---------

Co-authored-by: israx <70438514+israx@users.noreply.github.com>
Co-authored-by: David McAfee <mcafd@amazon.com>
Co-authored-by: Jim Blanchard <jim.l.blanchard@gmail.com>
Co-authored-by: aws-amplify-bot <aws@amazon.com>
Co-authored-by: Hui Zhao <10602282+HuiSF@users.noreply.github.com>
Co-authored-by: AllanZhengYP <zheallan@amazon.com>
Co-authored-by: Hui Zhao <zhohz@amazon.com>
Co-authored-by: Ivan Artemiev <29709626+iartemiev@users.noreply.github.com>
Co-authored-by: Aaron S <94858815+stocaaro@users.noreply.github.com>
Co-authored-by: ManojNB <manojnb95@gmail.com>
Co-authored-by: ManojNB <manojnb@amazon.com>
Co-authored-by: Francisco Rodriguez <frodriguez.cs@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants