forked from aws-amplify/amplify-js
-
Notifications
You must be signed in to change notification settings - Fork 0
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
[pull] main from aws-amplify:main #535
Open
pull
wants to merge
597
commits into
MLH-Fellowship:main
Choose a base branch
from
aws-amplify:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
+188,221
−844,189
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* chore: Add meta-data to core to ensure it is always released. * Ignore metadata file from license check.
Co-authored-by: Ashwin Kumar <[email protected]>
* Update PULL_REQUEST_TEMPLATE.md * Update PULL_REQUEST_TEMPLATE.md
- @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected]
chore: Standardize release commit message formatting.
* chore: update PRs checklist to also add/update E2E tests * Update .github/PULL_REQUEST_TEMPLATE.md Co-authored-by: Hui Zhao <[email protected]> * address feedback --------- Co-authored-by: Ashwin Kumar <[email protected]> Co-authored-by: Hui Zhao <[email protected]>
…13545) * chore: enabling linting on __tests__ for the react-native packages * chore(rtn-push-notification): run yarn lint:fix * chore(rtn-push-notification): manual fix linter errors
…users (#13536) fix: handle case when getting auth info for expired token users Co-authored-by: Aaron S <[email protected]>
* feat: add types * feat: enable delimiter * chore: add unit tests * chore: bump bundle size * chore: add tsdocs * chore: address feedback * chore: address feedback * chore: address feedback
feat: enable storage next js app
- @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected]
) The purpose of this change is to downgrade the react-native-get-random-values peer dependency from >=1.9.0 to >=1.8.0.Expo 50 utilizes 1.8.0 as a dependency and amplify-js dependency of 1.9.0 produced installation friction when getting started via the recommended workflow. Dropping the peer dep version will remove installation friction while having no impact on current library functionality.
* update parseAmplifyOutput * update bundle size * address comments * update bundle size
* update options and test * update assertion error & download test * update getUrl & getProp test * update remove and list tests * update multi-part tests * update list & download test * update more storage tests * update bundle size * address comments
* fix: omit subPathStrategy on prefix * chore: fix build * chore: address feedback
- @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected]
feat(api-graphql): return entire payload in callback
* fix(core): Check for storage initialization errors * address nits and add logger * fixed unit test errors * bundle size fixes * implementing feedback Co-authored-by: AllanZhengYP <[email protected]> --------- Co-authored-by: AllanZhengYP <[email protected]>
- @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected]
- @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected]
Bumps [@eslint/plugin-kit](https://github.com/eslint/rewrite) from 0.2.0 to 0.2.3. - [Release notes](https://github.com/eslint/rewrite/releases) - [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json) - [Commits](eslint/rewrite@core-v0.2.0...plugin-kit-v0.2.3) --- updated-dependencies: - dependency-name: "@eslint/plugin-kit" dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…#14017) remove redundant "email" from OAuthScope type definition
* chore: enable storage-browser preid release * chore: sync main (#13478) * release(required): Parsing custom oAuth in amplify_outputs (#13474) * update parseAmplify logic * revert custom oAuth from gen1 config * update bundle size * chore(release): Publish [skip release] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] * chore(release): update API docs [skip release] --------- Co-authored-by: ashika112 <[email protected]> Co-authored-by: aws-amplify-bot <[email protected]> Co-authored-by: Jim Blanchard <[email protected]> * feat(storage): add delimiter support (#13480) * feat: add delimiter input/output types * feat: pass Delimiter parameter to ListObjectsV2 API * chore: add unit tests * chore: bump bunde size * chore: address feedback * chore: fix build * chore: address feedback * chore: address feedback * chore: address feedback * chore: enable storage-browser preid release (#13524) chore: fix npm dist tag to be storage-browser * feat(storage): add base types for storage browser (#13528) * feat(storage): add base types * fix(storage): address feedbacks Co-authored-by: israx <[email protected]> * feat(storage): add creds store scaffolding and update types (#13558) * feat(storage): add cred store lru implementation (#13561) * refactor(storage): decouple utils from Amplify singleton (#13562) * feat: add config constructor * refactor: remove singleton reference from storage utils * refactor: update storage utils * chore: update upload api * chore: address feedback * chore: fix unit tests * chore: remove singleton reference * chore: add license headers * chore: address feedback * chore: update bundle size * chore: address feedback * chore: update bundle size * feat(storage): add cred store creation implementation (#13575) Co-authored-by: israx <[email protected]> * feat(storage): use WeakMap for store registry (#13586) * feat(storage): use WeakMap for store registry * chore(storage): export storage browser utils from @aws-amplify/storage/storage-browser * doc(storage): add disclaimer * feat(storage): Added getDataAccess & listCallerAccessGrant clients (#13582) * feat(storage): add an adapter interface for storage browser (#13576) --------- Co-authored-by: Jim Blanchard <[email protected]> * Revert "refactor(storage): decouple utils from Amplify singleton (#13562)" (#13597) This reverts commit 1079e7f. * feat(storage): simplify the location cred provider option input (#13601) Remove the un-essetnial validation of per-API's location credentials provider input scope and permission for now. * feat: Implement getLocationCredentials handler & integrate with adapter (#13600) * feat(storage): implement listLocations API and creation handler (#13602) * chore: expose path storage-browser from scoped package (#13611) chore: expose path storage-browser from scoped package Co-authored-by: Ashwin Kumar <[email protected]> * feat(storage): enables location credentials provider (#13605) * feat: add location credentials provider * chore: add unit tests * chore: address feedback * chore: add locationCredentialsOption to copy * chore: remove casting types * chore: assert idenitity id * chore: avoid export common options interface * chore: address feedback * chore: fix test * chore: address feedback * address feedback * chore: clean-up types * chore: add test * chore: update api bundlesize * feat(storage): resolve merge issue with multibucket * chore: update bundle size for config change and s3 multibucket * chore: address feedbacks * feat(storage): introduce preventOverwrite option to uploadData via HeadObject (#13640) * feat(storage): introduce preventOverwrite operation to uploadData via HeadObject * fix: add missing license and remove dependency on core in preventOverwrite validator * chore: update storage:uploadData bundle size * feat: move existing object validation to before completeMultipartUpload * fix: increase storage:uploadData bundle size * fix(storage): export storage-browser types for TS v4.2+ (#13647) * chore(storage-browser): export store and credentials related types, update createListLocationsHandler (#13660) * feat(storage): support force refresh location credentials (#13589) * feat(storage): require temporary creds for storage browser interfaces (#13664) * feat: introduce CRC32 checksums to storage:uploadData API (#13649) Co-authored-by: Donny Wu <[email protected]> * fix(storage-browser): listCallerAccessGrantsDeserializer not parsing multiple AccessGrant instances (#13671) * fix(storage-browser): listCallerAccessGrantsDeserializernot parsing multiple AccessGrant instances * chore: add unit tests for single and multiple grants --------- Co-authored-by: Ashwin Kumar <[email protected]> * chore(storage-browser): expose additional input output types (#13682) * chore(storage-browser): expose additional internal types * address feedback * remove 'applicationArn' from listCallerAccessGrant unit test * Update packages/storage/src/storageBrowser/apis/listCallerAccessGrants.ts Co-authored-by: Caleb Pollman <[email protected]> --------- Co-authored-by: Ashwin Kumar <[email protected]> Co-authored-by: Caleb Pollman <[email protected]> * chore: add ui to storage browser co-owner * chore: update bundle size * chore: enable storage-browser integ test (#13698) Co-authored-by: Ashwin Kumar <[email protected]> * chore(storage): update s3 control model (#13705) * chore(storage): update s3 control model * fix: move permission validation to custom client * chore: formatting code * chore(storage-browser): pin crc-32 dep at 1.2.2 (#13752) * chore(storage-browser): pin crc-32 dep at 1.2.2 * chore: update lock file * chore(storage): add durability check for urls in put object (#13746) chore: add durability check for presigned urls in put object * fix(storage-browser): missing error wrapping for s3 control responses (#13779) * feat: validate corroborating elements in response, and compare echoed elements between request/response (#13764) * feat: add list call response validation * fix: add input key to test mock * feat: align list response validations with design * fix: increment bundle size for storage:list --------- Co-authored-by: Donny Wu <[email protected]> * feat(storage): add support for conditional headers to copy, and validate serialization (#13772) * feat: add notModifiedSince and eTag to copy * missing tests for durability helpers * add tests for integrity helpers * feat: add URL validation and tests for copyObject * chore: increase bundle size of storage:copy * feat: clean-up copy header validation logic * fix: revert copy option interface name changes --------- Co-authored-by: Donny Wu <[email protected]> * feat: adding object url checks (#13810) * chore: durability checks for create & complete multipart (#13809) * chore: durability checks for create & complete multipart * fix: parsePayload mock path * chore: enable e2e and tagged release (#13848) * chore: enable e2e and tagged release * core: update tag name * Revert "core: update tag name" This reverts commit c994f51. --------- Co-authored-by: Ashwin Kumar <[email protected]> * chore: Setup storage internals route (#13858) * chore: increse bundle size * chore: Refactor contents of `storage-browser/` path into `internals/` (#13859) * feat(storage): export Default Part Size constant (#13851) * chore: adds a flag to uploadData api output * chore: update comments for the flag * chore: revert some naming changes * chore: revert and make internal paramter optional with a default value * chore: update bundle size * chore: update to expose constant instead of bool in return type * chore: update export tests * chore: increase bundle size * chore: Setup storage internals route (#13858) * chore: Refactor contents of `storage-browser/` path into `internals/` (#13859) * fix: multipart upload storage crc32 integrity (#13878) * fix: multipart upload storage crc32 integrity * address comments Co-authored-by: AllanZhengYP <[email protected]> * fix linter --------- Co-authored-by: Ashwin Kumar <[email protected]> Co-authored-by: AllanZhengYP <[email protected]> * feat(storage): internal GetProperties API (#13869) --------- Co-authored-by: Jim Blanchard <[email protected]> * feat(storage): add new internal remove api (#13880) feat(internal-remove): add new internal remove api Co-authored-by: Ashwin Kumar <[email protected]> * chore: Add internal getUrl API (#13882) * feat(storage): internals list API (#13874) * feat(storage): add new internal downloadData api (#13887) * feat(internal-remove): add new internal downloadData api * code cleanup * code cleanup * chore: fix ts doc --------- Co-authored-by: Ashwin Kumar <[email protected]> * feat: optional checksum algorithm for upload (#13849) * feat: opt in checksum * fix: revert local prettier suggestion * fix: up size limit for storage upload data * feat: react native crc32 * fix: up bundle size limit and fix typo * feat: add documentation for checksumAlgorithm * fix: update bundle size limit * fix: update bundle size limit * fix: address pr feedbacks * fix: bundle-size limit --------- Co-authored-by: AllanZhengYP <[email protected]> * feat(storage): add remaining copy changes for internals (#13889) * chore: add remaining copy changes for internals * chore; explicitly call internal API with params * chore: copy return type * chore: feedback changes * feat(storage): internal uploadData implementation (#13888) * feat(storage): internal uploadData implementation * chore: update bundle size * fix: address feedbacks * revert: optional checksum algorithm for upload (#13849) (#13910) This reverts commit 02cb08a. * fix(storage): internals list function not able to decide which output types to use (#13915) chore: add function overloading to list * feat(storage): Add API support for Expected Bucket Owner (#13914) * Update Top/Internal API for expected bucket owner feat --------- Co-authored-by: JoonWon Choi <[email protected]> * chore: sync main with storage browser integrity branch (#13928) * chore(release): Set core metadata [skip release] * chore(release): Publish [skip release] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] * chore(release): Update API docs [skip release] * chore: update contributing guide vite troubleshooting (#13826) * docs: update contributing guide vite troubleshooting * Update CONTRIBUTING.md --------- Co-authored-by: AllanZhengYP <[email protected]> * chore(ai): add UpdateConversation enum (#13920) * chore(release): Set core metadata [skip release] * chore(release): Publish [skip release] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] * chore(release): Update API docs [skip release] * fix(storage): multipart upload is firing on 0 bytes data (#13927) * chore: update bundle size --------- Co-authored-by: erinleigh90 <[email protected]> Co-authored-by: aws-amplify-bot <[email protected]> Co-authored-by: Parker Scanlon <[email protected]> Co-authored-by: AllanZhengYP <[email protected]> Co-authored-by: Danny Banks <[email protected]> Co-authored-by: ashika112 <[email protected]> Co-authored-by: Hui Zhao <[email protected]> * feat: Add expectedBucketOwner to remaining internal APIs (#13932) feat: Add expectedBucketOwner to remaining internal APIs. * feat(storage): add advanced option to disable upload cache (#13931) * feat(storage): set allowedByApp to listCallerAccessGrants (#13934) * Storage Browser Default Auth (#13866) * first draft poc * upadtes * add listPaths API * update new file structure * fix types * refactor types and utils * update tests * fix test * fix bundle size test * update the listLocation handler * rename util * update Path type * fix missed type * chore(ci): add new storage-gen2-internal e2e test (#13916) Co-authored-by: Ashwin Kumar <[email protected]> * chore(storage): remove credential store and managed auth config factory (#13944) * feat: optional checksum algorithm for upload (#13939) Co-authored-by: AllanZhengYP <[email protected]> * feat: preventOverwrite with if-none-match header (#13954) Co-authored-by: AllanZhengYP <[email protected]> * Feat: Add pagination to Amplify Default Auth storage Browser (#13897) * update the listLocation handler * implement memoization * add pagination logic * update usergroup logic & test * update getPaginated Locations * fix failing test * test(storage): refactor unit tests for public & internal facade (#13955) * Chore: Remove createAmplifyAdapter & refactor (#13974) remove createAmplifyAdapter & refactor * update bundle size * fix bundle size & test * Fix: retry failure in storage retryDecider (#13977) fix retry failure * feat: validate uploaded parts before completing upload (#13763) Co-authored-by: Donny Wu <[email protected]> Co-authored-by: Allan Zheng <[email protected]> * feat(storage): add customEndpoint to internal apis in advanced options (#13961) * feat: add baseEndpoint to advanced options * feat: add baseEndpoint to customEndpoint * feat: thread baseEndpoint through resolved config to endpoint resolver * add customEndpoint advanced option to internals storage data-plane apis * add customEndpoint advanced option to internals storage control-plane apis * fix unit test * code cleanup * increase bundle size * wire up customEndpoint on copy API * increase the bundle size * add customEndpoint unit tests for all data and control apis * increase bundle size * update ts docs * add additional error unit tests for endpointResolver * add unit tests for internals/ apis * code cleanup * address feedback * add comment for ForcePathStyleEndpointNotSupported ErrorCode * increase bundle size * remove docs links from error recovery message --------- Co-authored-by: Erin Beal <[email protected]> Co-authored-by: Ashwin Kumar <[email protected]> * fix(core): support endpoint resolver accepting both input and config(#13985) * feat(storage): allow checksum algo for internal upload API (#14002) * feat: allow setting encoding type for list calls * refactor: move to list internal * fix: add license * fix(storage): bug in copy unmodified since to use UTC (#14025) fix to use UTC and test * Revert "chore: enable e2e and tagged release (#13848)" This reverts commit 3dfde04. * revert tagged release --------- Co-authored-by: Allan Zheng <[email protected]> Co-authored-by: israx <[email protected]> Co-authored-by: ashika112 <[email protected]> Co-authored-by: aws-amplify-bot <[email protected]> Co-authored-by: Jim Blanchard <[email protected]> Co-authored-by: Ashwin Kumar <[email protected]> Co-authored-by: Ashwin Kumar <[email protected]> Co-authored-by: Jamie Epp <[email protected]> Co-authored-by: Jamie Epp <[email protected]> Co-authored-by: Caleb Pollman <[email protected]> Co-authored-by: Donny Wu <[email protected]> Co-authored-by: Caleb Pollman <[email protected]> Co-authored-by: Sergio Castillo Yrizales <[email protected]> Co-authored-by: Joon Choi <[email protected]> Co-authored-by: JoonWon Choi <[email protected]> Co-authored-by: erinleigh90 <[email protected]> Co-authored-by: Parker Scanlon <[email protected]> Co-authored-by: Danny Banks <[email protected]> Co-authored-by: Hui Zhao <[email protected]> Co-authored-by: ashika112 <[email protected]> Co-authored-by: Erin Beal <[email protected]> Co-authored-by: Pranav Malewadkar <[email protected]> Co-authored-by: Pranav Malewadkar <[email protected]>
* chore: upgrading cross-spawn version to non-vulnerable version * chore: adding ending blank line --------- Co-authored-by: yuhengshs <[email protected]>
- @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected]
* chore: disable dependency review * feat(auth): associateWebAuthnCredential API (#1) * feat(auth): signIn with a webauthn credential (#3) wip * feat(auth): listWebAuthnCredentials API (#6) * feat(auth): deleteWebAuthnCredential API (#8) * feat(auth): Added signInWithUserAuth for password-less Sign-In (#2) * feat(auth): Add USER_AUTH flow in Sign Up logic (#11) * feat(auth): enable autoSignIn support for passwordless (#7) * tmp disable code ql * handle SMS_OTP sign in result * cache session from signup and confirmsignup both * add getSignInResult test * bundle size tests * feat(passwordless): refactor to support new Cognito API changes (#14) * refactor to support new APIs * bundle size updates * update exception mapping (#15) * feat(auth): passwordless webauthn ceremony errors (#16) * update exception mapping * update passkey error handling * update tests * bundle size tests * simplify language * refine error messages * fix(auth): clear auto sign in store on sign in (#18) * fix(auth): clear auto sign in store on sign in * add unit test * feat(auth): refactor foundational APIs to not access singleton (#17) * enable ssr list and delete web authn credentials * update unit tests * add foundation tests * revert: expose server APIs * feat(auth): passwordless - enable test specs / push trigger (#19) * enable test specs / push trigger * check for PublicKeyCredential * bundle size tests * fix recovery suggestion language * align assertion with expected type * fix tsdocs * bundle size updates * fix(auth): passwordless pr feedback (#22) * callout in ts docs for password requirement * unify callback and store reset for autosignin * comment for clarity * enable integ tests * fix: set active username after auth attempt to maintain consistent user context * temporarily run single test spec per environment * reset push integ yml --------- Co-authored-by: Parker Scanlon <[email protected]> Co-authored-by: yuhengshs <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )