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

feat(clients): cognito identity client #11213

Merged
merged 27 commits into from
Apr 14, 2023

Conversation

AllanZhengYP
Copy link
Member

@AllanZhengYP AllanZhengYP commented Apr 10, 2023

Description of changes

This change add an API composer function to compose transfer handler with serializer and deserializer, so users provider modeled input and expect modeled output.

This change also implement Cognito Identity service's GetId() and GetCredentialsForIdentity() APIs with aforementioned service API composer function.

The Cognito Identity APIs are integrated into the core package and produces 15 ~ 20kB bundle size reduction across the board.

As part of service APIs, this change also include default retry decider implementation and utilities to handle JSON payloads.

Category Current size new size
api-graphql 104.5 kB 86.1 kB
api-rest 47.5 kB 28.7 kB
api 106 kB 87.4 kB
auth 73 kB 53.3 kB
datastore 155 kB 135.5 kB
geo 65 kB 50.2 kB
interactions 87 kB 74 kB
notifications 71 kB 58.9 kB
pubsub(IoT) 97.5 kB 78.5 kB
pubsub(Mqtt) 97.5 kB 78.4 kB

Description of how you validated changes

Integration test (Associated branch: staging repo branch)

TODO:

  • unblock the RN storage test failure
  • functional test of the Cognito Identity API(will be in separate PR)
  • user-agent middleware compatible with AWS SDK(will be in separate PR)
  • Bundler test
    • webpack5
    • webpack4
    • Vite

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.

@AllanZhengYP AllanZhengYP force-pushed the v5/custom-clients-cognito branch from 26f2888 to 62b6871 Compare April 11, 2023 06:55
@AllanZhengYP AllanZhengYP force-pushed the v5/custom-clients-cognito branch from 62b6871 to c95dbd2 Compare April 11, 2023 18:48
Copy link
Member

@cshfang cshfang left a comment

Choose a reason for hiding this comment

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

Left a lot of comments. Many are nit, many are suggestions that you can feel free to agree/disagree with. I was trying to be very very thorough/meticulous/critical since this is an important foundation to how we handle these clients going forward

@AllanZhengYP AllanZhengYP force-pushed the v5/custom-clients-cognito branch from 4c04beb to a45be79 Compare April 12, 2023 23:47
@AllanZhengYP AllanZhengYP requested a review from cshfang April 12, 2023 23:59
@AllanZhengYP AllanZhengYP force-pushed the v5/custom-clients-cognito branch from a45be79 to 859cffc Compare April 13, 2023 00:03
Copy link
Member

@stocaaro stocaaro left a comment

Choose a reason for hiding this comment

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

Made a pass. Overall, this really seems to be coming together.

});
}
return {
identityId: identityId ?? this._identityId,
Copy link
Member

Choose a reason for hiding this comment

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

The logic of only calculating /assigning this._identityId above then null coalescing the two here feels redundant. Is there a missing private method to extract/shrink this clarification logic that can just be called here?

Comment on lines +387 to +388
if (!identity_id) {
const { IdentityId } = await getId(cognitoConfig, {
Copy link
Member

Choose a reason for hiding this comment

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

Same as above? Code sharing opportunity?

Copy link
Member Author

Choose a reason for hiding this comment

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

This code has some side effect to the this, I'd defer the bigger refactor till later.

Copy link
Contributor

@jimblanc jimblanc 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, nice work!

FYI looks like the API bundle size limit needs some tweaking. Some other nits below.

@AllanZhengYP AllanZhengYP force-pushed the v5/custom-clients-cognito branch from 08f7aa9 to 63ab88f Compare April 13, 2023 22:36
@AllanZhengYP AllanZhengYP marked this pull request as ready for review April 13, 2023 22:37
@AllanZhengYP AllanZhengYP requested review from a team as code owners April 13, 2023 22:37
@AllanZhengYP AllanZhengYP requested a review from stocaaro April 13, 2023 22:38
@AllanZhengYP AllanZhengYP merged commit 67e4017 into v5/custom-clients Apr 14, 2023
@AllanZhengYP AllanZhengYP deleted the v5/custom-clients-cognito branch April 24, 2023 20:12
erinleigh90 pushed a commit that referenced this pull request Jun 6, 2023
* chore(core): bump to ts 5.0 (#11077)

* feat(clients): basic types and fetch handler (#11120)

* feat(clients): compose transfer handler with middleware & retry middleware (#11188)

* feat(clients): middleware interface and retry middleware

* test(clients): retry middleare unit test

* fix(clients): middleware type to include options

* feat(clients): add retry middleware unit test and update interface

* chore(clients): update bundle size limit for fetch and retry

* chore(clients): add retry docs; fix format

* fix(clients): address feedbacks

* fix(retry): add metadata to returns from retry middldeware (#11212)

* fix(retry): add metadata to returns from retry middldeware; fix minor bugs

* feat(clients): address retry middleware feedbacks

Co-authored-by: Chris F <5827964+cshfang@users.noreply.github.com>

* chore(core): update size limit

* feat(clients): cognito identity client (#11213)

* feat(clients): implement service API composer

* chore(clients): rename middleware interface

* feat(clients): middleware handler interface can be non request/response interface

* chore(clients): move fetch handler to handlers folder

* feat(clients): implement user agent middleware

* feat(clients): implement unauth aws transfer handler

* feat(clients): implement api handler composer

* feat(clients): implement cognito-identity client

* chore(clients): update bundle size limit

* feat(clients): add serde utils; remove retry in api handler composer

* feat(clients): integrate cognito-identity client to Credentials class

* fix(clients): make retryDecider interface async

* chore: move cognito client to dev dep

* chore(clients): use Pascale path name

* fix(clients): handle fetch response.body undefined in RN

* chore: publish under v5-custom-clients dist-tag

* fix(clients): read body once for errors

* chore(clients): enable tagged release of custom clients (#11267)

* test(clients): add functional test to cognito identity client (#11266)

* test(clients): add cognito-identity functional test

* chore(clients): prefer destructuring parameters at top

* feat(clients): add useragent to cognito identity (#11269)

* chore(clients): add license header to files (#11292)

* feat(clients): Add custom signature v4 signer (#11273)

* feat(clients): Add custom signature v4 signer

* Updated docstrings

* Extracted common code

* Use == null instead of isNil

* Add unit tests

* Add missing licensing headers

* Use test case options in presign tests

* Fixed comment

* Add test for data hashing with SourceData keys

* Remove buffer dependency

* Remove internal sdk dependency

* chore(clients): Make signing functions synchronous (#11307)

* chore(clients): Replace existing Signer implementation (#11310)

* chore(clients): Add @internal annotation (#11320)

* feat(clients): Add signing middleware (#11323)

* feat(clients): Add signing middleware

* Use closure for clock offset

* Add bundle size test entry

* Address comments

* feat(clients): support CN partition by adding DNS suffix resolver (#11311)

* feat(clients): support CN partition by adding DNS suffix resolver

* chore(clients): update bundle size test limit

* fix(clients): address feedbacks

* chore: update bundle size limit

* chore(clients): Add context to some regex (#11334)

* feat(clients) Add updateEndpoint API (#11330)

* feat(clients) Add updateEndpoint API

* Rename handler

* chore(clients): Use DNS suffix util in Pinpoint client (#11340)

* chore(clients): Annotate custom client APIs with @internal (#11347)

* feat(clients) Add putEvents API (#11342)

* feat(clients) Add putEvents API

* Add additional verification for expected date format

* Mark API as internal

* feat(clients) Add getInAppMessages API (#11348)

* feat(clients) Add getInAppMessages API

* Update unit test

* chore(clients): Replace SDK Pinpoint Client (#11359)

Co-authored-by: Allan Zheng <zheallan@amazon.com>

* chore: update size limit

* chore(clients): export pinpoint client from internal subpath (#11369)

* feat(clients): allow fetch handler to read body multiple times

* chore: update size limit

* fix(clients): add react-native entrypoint for internal modules

* chore: address feedbacks

* feat(clients): vendor TS types from pinpoint and cognito-identity clients (#11393)

* chore: dts bundler script for AWS SDK types

* feat(clients): vendor AWS SDK client types

* chore: workaround the tslint errors for generated rollup types

* docs: add readme to build clients script

* feat: update SDK types

* chore(storage): update size limit (#11406)

* fix(clients): middleware chain revert after every invocation (#11432)

* chore: prepare for release; split out data packages diffs

* fix: address feedbacks

* fix(analytics): apply useragent enhancement to pinpoint client

* chore: update size limit

* fix: Auth bundle size test

* fix: Update bundle size for pubsub

* fix: api-graphql bundle size update

* fix: Update api bundle sizes

* fix: DataStore bundle size test

---------

Co-authored-by: Chris F <5827964+cshfang@users.noreply.github.com>
Co-authored-by: Aaron S <94858815+stocaaro@users.noreply.github.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.

4 participants