{"id":13475225,"url":"https://github.com/aws/aws-sdk-js-v3","last_synced_at":"2026-02-25T21:07:55.634Z","repository":{"id":37247326,"uuid":"87228090","full_name":"aws/aws-sdk-js-v3","owner":"aws","description":"Modularized AWS SDK for JavaScript.","archived":false,"fork":false,"pushed_at":"2026-02-21T00:04:42.000Z","size":2083651,"stargazers_count":3575,"open_issues_count":155,"forks_count":663,"subscribers_count":43,"default_branch":"main","last_synced_at":"2026-02-21T01:11:37.971Z","etag":null,"topics":["aws-sdk","aws-sdk-js","dynamodb","javascript","lambda","nodejs","s3","sns","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aws.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-04-04T19:44:22.000Z","updated_at":"2026-02-21T00:04:45.000Z","dependencies_parsed_at":"2022-07-12T23:10:35.708Z","dependency_job_id":"36485625-c420-4055-9b22-6914af5c076d","html_url":"https://github.com/aws/aws-sdk-js-v3","commit_stats":{"total_commits":8431,"total_committers":149,"mean_commits":56.58389261744966,"dds":0.3829913414778793,"last_synced_commit":"9b3fa28ae6bc7bf69f30a0f9e89eac4e058e4793"},"previous_names":[],"tags_count":14158,"template":false,"template_full_name":null,"purl":"pkg:github/aws/aws-sdk-js-v3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Faws-sdk-js-v3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Faws-sdk-js-v3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Faws-sdk-js-v3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Faws-sdk-js-v3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aws","download_url":"https://codeload.github.com/aws/aws-sdk-js-v3/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Faws-sdk-js-v3/sbom","scorecard":{"id":219429,"data":{"date":"2025-08-11","repo":{"name":"github.com/aws/aws-sdk-js-v3","commit":"dc1b75f84e41648d99d5c3c9a98197877d59260f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/stale_issues.yml:12","Warn: no topLevel permission defined: .github/workflows/closed-issue-message.yml:1","Warn: no topLevel permission defined: .github/workflows/codegen-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/commit-message-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/git-sync.yml:1","Warn: no topLevel permission defined: .github/workflows/handle-stale-discussions.yml:1","Warn: no topLevel permission defined: .github/workflows/issue-regression-labeler.yml:1","Warn: no topLevel permission defined: .github/workflows/lock.yml:1","Warn: no topLevel permission defined: .github/workflows/pre-commit-hooks.yml:1","Warn: no topLevel permission defined: .github/workflows/stale_issues.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v3.866.0 not signed: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/239464910","Warn: release artifact v3.865.0 not signed: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/239152488","Warn: release artifact v3.864.0 not signed: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/238685339","Warn: release artifact v3.863.0 not signed: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/238411562","Warn: release artifact v3.862.0 not signed: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/238079273","Warn: release artifact v3.866.0 does not have provenance: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/239464910","Warn: release artifact v3.865.0 does not have provenance: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/239152488","Warn: release artifact v3.864.0 does not have provenance: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/238685339","Warn: release artifact v3.863.0 does not have provenance: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/238411562","Warn: release artifact v3.862.0 does not have provenance: https://api.github.com/repos/aws/aws-sdk-js-v3/releases/238079273"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/aws/.github/SECURITY.md:1","Info: Found linked content: github.com/aws/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/aws/.github/SECURITY.md:1","Info: Found text in security policy: github.com/aws/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: codegen/gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: tests/react-native/End2End/android/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/closed-issue-message.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/closed-issue-message.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codegen-ci.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/codegen-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codegen-ci.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/codegen-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commit-message-lint.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/commit-message-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/commit-message-lint.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/commit-message-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/git-sync.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/git-sync.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/handle-stale-discussions.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/handle-stale-discussions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/issue-regression-labeler.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/issue-regression-labeler.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lock.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/lock.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pre-commit-hooks.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/pre-commit-hooks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pre-commit-hooks.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/pre-commit-hooks.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/stale_issues.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/aws/aws-sdk-js-v3/stale_issues.yml/main?enable=pin","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":0,"reason":"31 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-mg2h-6x62-wpwc","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3","Warn: Project is vulnerable to: GHSA-vg6x-rcgg-rjx6","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-9crc-q9x8-hgqq"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T02:12:09.084Z","repository_id":37247326,"created_at":"2025-08-17T02:12:09.084Z","updated_at":"2025-08-17T02:12:09.084Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29797881,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T19:56:48.334Z","status":"ssl_error","status_checked_at":"2026-02-24T19:55:43.372Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-sdk","aws-sdk-js","dynamodb","javascript","lambda","nodejs","s3","sns","typescript"],"created_at":"2024-07-31T16:01:18.509Z","updated_at":"2026-02-25T21:07:55.600Z","avatar_url":"https://github.com/aws.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","typescript"],"sub_categories":[],"readme":"# AWS SDK for JavaScript v3\n\n![Build Status](https://codebuild.us-west-2.amazonaws.com/badges?uuid=eyJlbmNyeXB0ZWREYXRhIjoiMmtFajZWQmNUbEhidnBKN1VncjRrNVI3d0JUcFpGWUd3STh4T3N3Rnljc1BMaEIrYm9HU2t4YTV1RlE1YmlnUG9XM3luY0Ftc2tBc0xTeVFJMkVOa24wPSIsIml2UGFyYW1ldGVyU3BlYyI6IlBDMDl6UEROK1dlU1h1OWciLCJtYXRlcmlhbFNldFNlcmlhbCI6MX0%3D\u0026branch=main)\n[![codecov](https://codecov.io/gh/aws/aws-sdk-js-v3/branch/main/graph/badge.svg)](https://codecov.io/gh/aws/aws-sdk-js-v3)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n\nThe **AWS SDK for JavaScript v3** is a rewrite of v2 with some great new features.\nAs with version 2, it enables you to easily work with [Amazon Web Services](https://aws.amazon.com/),\nbut has a [modular architecture](https://aws.amazon.com/blogs/developer/modular-packages-in-aws-sdk-for-javascript/) with a separate package for each service.\nIt also includes many frequently requested features, such as a [first-class TypeScript support](https://aws.amazon.com/blogs/developer/first-class-typescript-support-in-modular-aws-sdk-for-javascript/)\nand a [new middleware stack](https://aws.amazon.com/blogs/developer/middleware-stack-modular-aws-sdk-js/).\nFor more details, visit blog post on [general availability of Modular AWS SDK for JavaScript](https://aws.amazon.com/blogs/developer/modular-aws-sdk-for-javascript-is-now-generally-available/).\n\nTo get started with JavaScript SDK version 3, visit our\n[Developer Guide](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/welcome.html)\nor [API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/).\n\nIf you are starting a new project with AWS SDK for JavaScript v3, then you can refer\n[aws-sdk-js-notes-app](https://github.com/aws-samples/aws-sdk-js-notes-app) which shows examples of calling\nmultiple AWS Services in a note taking application.\nIf you are migrating from v2 to v3, then you can visit our [self-guided workshop](https://github.com/aws-samples/aws-sdk-js-v3-workshop)\nwhich builds as basic version of note taking application using AWS SDK for JavaScript v2\nand provides step-by-step migration instructions to v3.\n\nTo test your universal JavaScript code in Node.js, browser and react-native environments,\nvisit our [code samples repo](https://github.com/aws-samples/aws-sdk-js-tests).\n\nPerformance is crucial for the AWS SDK for JavaScript because it directly impacts the user experience.\nPlease refer to [Performance](https://github.com/aws/aws-sdk-js-v3/tree/main/supplemental-docs/performance) section to know more.\n\n# Table of Contents\n\n1. [Getting Started](#getting-started)\n1. [New Features](#new-features)\n   1. [Modularized packages](#modularized-packages)\n   1. [API consistency changes](#api-changes)\n      1. [Configuration](#configuration)\n      1. [Middleware Stack](#middleware)\n   1. [How to upgrade](#other-changes)\n1. [High Level Concepts in V3](#high-level-concepts)\n   1. [Generated Packages](#generated-code)\n   1. [Streams](#streams)\n   1. [Paginators](#paginators)\n   1. [Abort Controller](#abort-controller)\n   1. [Middleware Stack](#middleware-stack)\n1. [Working with the SDK in Lambda](#working-with-the-sdk-in-lambda)\n1. [Performance](#performance)\n1. [Install from Source](#install-from-source)\n1. [Giving feedback and contributing](#giving-feedback-and-contributing)\n1. [Release Cadence](#release-cadence)\n1. [Node.js versions](#nodejs-versions)\n1. [Stability of Modular Packages](#stability-of-modular-packages)\n1. [Known Issues](#known-issues)\n   1. [Functionality requiring AWS Common Runtime (CRT)](#functionality-requiring-aws-common-runtime-crt)\n\n## Getting Started\n\nLet’s walk through setting up a project that depends on DynamoDB from the SDK and makes a simple service call. The following steps use yarn as an example. These steps assume you have Node.js and yarn already installed.\n\n1. Create a new Node.js project.\n2. Inside of the project, run: `yarn add @aws-sdk/client-dynamodb`. Adding packages results in update in lock file, [yarn.lock](https://yarnpkg.com/getting-started/qa/#should-lockfiles-be-committed-to-the-repository) or [package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json). You **should** commit your lock file along with your code to avoid potential breaking changes.\n\n3. Create a new file called index.js, create a DynamoDB service client and send a request.\n\n```javascript\nconst { DynamoDBClient, ListTablesCommand } = require(\"@aws-sdk/client-dynamodb\");\n\n(async () =\u003e {\n  const client = new DynamoDBClient({ region: \"us-west-2\" });\n  const command = new ListTablesCommand({});\n  try {\n    const results = await client.send(command);\n    console.log(results.TableNames.join(\"\\n\"));\n  } catch (err) {\n    console.error(err);\n  }\n})();\n```\n\nIf you want to use non-modular (v2-like) interfaces, you can import client with only the service name (e.g DynamoDB), and call the operation name directly from the client:\n\n```javascript\nconst { DynamoDB } = require(\"@aws-sdk/client-dynamodb\");\n\n(async () =\u003e {\n  const client = new DynamoDB({ region: \"us-west-2\" });\n  try {\n    const results = await client.listTables({});\n    console.log(results.TableNames.join(\"\\n\"));\n  } catch (err) {\n    console.error(err);\n  }\n})();\n```\n\nIf you use tree shaking to reduce bundle size, using non-modular interface will increase the bundle size as compared to using modular interface.\n\n\u003c!-- Uncomment when numbers are available for gamma clients\nIn our workshop code, a lambda with DynamoDBClient and a command takes ~18kB while DynamoDB takes ~26 kB ([details](https://github.com/aws-samples/aws-sdk-js-v3-workshop/blob/dc3ad778b04dfe3f8f277dca67162da79c937eca/Exercise1/backend/README.md#reduce-bundle-size-by-just-importing-dynamodb)) --\u003e\n\nIf you are consuming modular AWS SDK for JavaScript on react-native environments, you will need\nto add and import following polyfills in your react-native application:\n\n- [react-native-get-random-values](https://www.npmjs.com/package/react-native-get-random-values)\n- [react-native-url-polyfill](https://www.npmjs.com/package/react-native-url-polyfill)\n- [web-streams-polyfill](https://www.npmjs.com/package/web-streams-polyfill)\n\n```js\nimport \"react-native-get-random-values\";\nimport \"react-native-url-polyfill/auto\";\nimport \"web-streams-polyfill/dist/polyfill\";\n\nimport { DynamoDB } from \"@aws-sdk/client-dynamodb\";\n```\n\nSpecifically Metro bundler used by react-native, enable Package Exports Support:\n\n- https://metrobundler.dev/docs/package-exports/\n- https://reactnative.dev/blog/2023/06/21/package-exports-support\n\n## New features\n\n### Modularized packages\n\nThe SDK is now split up across multiple packages. The 2.x version of the SDK contained support for every service. This made it very easy to use multiple services in a project. Due to the limitations around reducing the size of the SDK when only using a handful of services or operations, many customers requested having separate packages for each service client. We have also split up the core parts of the SDK so that service clients only pull in what they need. For example, a service sends responses in JSON will no longer need to also have an XML parser as a dependency.\n\nFor those that were already importing services as sub-modules from the v2 SDK, the import statement doesn’t look too different. Here’s an example of importing the AWS Lambda service in v2 of the SDK, and the v3 SDK:\n\n```javascript\n// import the Lambda client constructor in v2 of the SDK\nconst Lambda = require(\"aws-sdk/clients/lambda\");\n\n// import the Lambda client constructor in v3 SDK\nconst { Lambda } = require(\"@aws-sdk/client-lambda\");\n```\n\nIt is also possible to import both versions of the Lambda client by changing the variable name the Lambda constructor is stored in.\n\n### API changes\n\nWe’ve made several public API changes to improve consistency, make the SDK easier to use, and remove deprecated or confusing APIs. The following are some of the big changes included in the new AWS SDK for JavaScript v3.\n\n#### Configuration\n\nIn version 2.x of the SDK, service configuration could be passed to individual client constructors.\nHowever, these configurations would first be merged automatically into a copy of the global SDK configuration: `AWS.config`.\n\nAlso, calling `AWS.config.update({/* params */})` only updated configuration for service clients instantiated after the update call was made, not any existing clients.\n\nThis behavior was a frequent source of confusion, and made it difficult to add configuration to the global object that only affects a subset of service clients in a forward-compatible way.\nIn v3, there is no longer a global configuration managed by the SDK.\nConfiguration must be passed to each service client that is instantiated.\nIt is still possible to share the same configuration across multiple clients but that configuration will not be automatically merged with a global state.\n\n#### Middleware\n\nVersion 2.x of the SDK allows modifying a request throughout multiple stages of a request’s lifecycle by attaching event listeners to a request.\nSome feedback we received frequently was that it can be difficult to debug what went wrong during a request’s lifecycle.\nWe’ve switched to using a middleware stack to control the lifecycle of an operation call now.\nThis gives us a few benefits. Each middleware in the stack calls the next middleware after making any changes to the request object.\nThis also makes debugging issues in the stack much easier since you can see exactly which middleware have been called leading up to an error.\nHere’s an example of logging requests using middleware:\n\n```javascript\nconst client = new DynamoDB({ region: \"us-west-2\" });\n\nclient.middlewareStack.add(\n  (next, context) =\u003e async (args) =\u003e {\n    console.log(\"AWS SDK context\", context.clientName, context.commandName);\n    console.log(\"AWS SDK request input\", args.input);\n    const result = await next(args);\n    console.log(\"AWS SDK request output:\", result.output);\n    return result;\n  },\n  {\n    name: \"MyMiddleware\",\n    step: \"build\",\n    override: true,\n  }\n);\n\nawait client.listTables({});\n```\n\nIn the above example, we’re adding a middleware to our DynamoDB client’s middleware stack.\nThe first argument is a function that accepts next, the next middleware in the stack to call, and context, an object that contains some information about the operation being called.\nIt returns a function that accepts args, an object that contains the parameters passed to the operation and the request, and returns the result from calling the next middleware with args.\n\n#### Other Changes\n\nIf you are looking for a breakdown of the API changes from AWS SDK for JavaScript v2 to v3,\nwe have them listed in [UPGRADING.md](https://github.com/aws/aws-sdk-js-v3/blob/main/UPGRADING.md).\n\n## Working with the SDK in Lambda\n\n### General Info\n\nThe Lambda provided AWS SDK is set to a specific minor version, and NOT the latest version. To \ndetermine which version of the SDK is included with the runtime you're using, \nsee [Runtime-included SDK versions](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html#nodejs-sdk-included) \nin the Lambda Developer Guide. To maintain full control of your dependencies, and to maximize \nbackward compatibility during automatic runtime updates, we recommend that you always include \nthe SDK modules your code uses in your function's deployment package or in a Lambda  layer. \nSee [Backward compatibility](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-update-compatibility) \nto learn more.\n\nThe performance of the AWS SDK for JavaScript v3 on node 18 has improved from v2 as seen in the [performance benchmarking](https://aws.amazon.com/blogs/developer/reduce-lambda-cold-start-times-migrate-to-aws-sdk-for-javascript-v3/)\n\n### Best practices\n\nWhen using Lambda we should use a single SDK client per service, per region, and initialize it outside of the handler's codepath. This is done to optimize for Lambda's [container reuse](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html).\n\nThe API calls themselves should be made from within the handler's codepath.\nThis is done to ensure that API calls are signed at the very last step of Lambda's execution cycle, after the Lambda is \"hot\" to avoid signing time skew.\n\nExample:\n\n```javascript\nimport { STSClient, GetCallerIdentityCommand } from \"@aws-sdk/client-sts\";\n\nconst client = new STSClient({}); // SDK Client initialized outside the handler\n\nexport const handler = async (event) =\u003e {\n  const response = {\n    statusCode: 200,\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n  };\n\n  try {\n    const results = await client.send(new GetCallerIdentityCommand({})); // API operation made from within the handler\n    const responseBody = {\n      userId: results.UserId,\n    };\n\n    response.body = JSON.stringify(responseBody);\n  } catch (err) {\n    console.log(\"Error:\", err);\n    response.statusCode = 500;\n    response.body = JSON.stringify({\n      message: \"Internal Server Error\",\n    });\n  }\n\n  return response;\n};\n```\n\n## Performance\n\nPlease refer to supplemental docs on [performance](https://github.com/aws/aws-sdk-js-v3/tree/main/supplemental-docs/performance) to know more.\n\n## Install from Source\n\nAll clients have been published to NPM and can be installed as described above. If you want to play with latest clients, you can build from source as follows:\n\n1. Clone this repository to local by:\n\n   ```\n   git clone https://github.com/aws/aws-sdk-js-v3.git\n   ```\n\n1. Under the repository root directory, run following command to link and build the whole library, the process may take several minutes:\n\n   ```\n   yarn \u0026\u0026 yarn test:all\n   ```\n\n   For more information, please refer to [contributing guide](https://github.com/aws/aws-sdk-js-v3/blob/main/CONTRIBUTING.md#setup-and-testing).\n\n1. After the repository is successfully built, change directory to the client that you want to install, for example:\n\n   ```\n   cd clients/client-dynamodb\n   ```\n\n1. Pack the client:\n\n   ```\n   yarn pack .\n   ```\n\n   `yarn pack` will create an archive file in the client package folder, e.g. `aws-sdk-client-dynamodb-v3.0.0.tgz`.\n\n1. Change directory to the project you are working on and move the archive to the location to store the vendor packages:\n\n   ```\n   mv path/to/aws-sdk-js-v3/clients/client-dynamodb/aws-sdk-client-dynamodb-v3.0.0.tgz ./path/to/vendors/folder\n   ```\n\n1. Install the package to your project:\n\n   ```\n   yarn add ./path/to/vendors/folder/aws-sdk-client-dynamodb-v3.0.0.tgz\n   ```\n\n## Giving feedback and contributing\n\nYou can provide feedback to us in several ways. Both positive and negative feedback is appreciated.\nIf you do, please feel free to [open an issue](https://github.com/aws/aws-sdk-js-v3/issues/new/choose) on our GitHub repository.\nOur GitHub issues page also includes work we know still needs to be done to reach full feature parity with v2 SDK.\n\n### Feedback\n\n**GitHub issues**. Customers who are comfortable giving public feedback can open a GitHub issue in the new repository.\nThis is the preferred mechanism to give feedback so that other customers can engage in the conversation, +1 issues, etc.\nIssues you open will be evaluated, and included in our roadmap for the GA launch.\n\n**Gitter channel**. For informal discussion or general feedback, you may join the [Gitter chat](https://gitter.im/aws/aws-sdk-js-v3).\nThe Gitter channel is also a great place to get help with v3 from other developers. JS SDK team doesn't\ntrack the discussion daily, so feel free to open a GitHub issue if your question is not answered there.\n\n### Contributing\n\nYou can open pull requests for fixes or additions to the new AWS SDK for JavaScript v3.\nAll pull requests must be submitted under the Apache 2.0 license and will be reviewed by an SDK team member prior to merging.\nAccompanying unit tests are appreciated. See [Contributing](CONTRIBUTING.md) for more information.\n\n## High Level Concepts\n\nThis is an introduction to some of the high level concepts behind AWS SDK for JavaScript (v3)\nwhich are shared between services and might make your life easier. Please consult the user\nguide and API reference for service specific details.\n\n#### Terminology:\n\n**Bare-bones clients/commands**: This refers to a modular way of consuming individual operations on JS SDK clients. It results in less code being imported and thus more performant. It is otherwise equivalent to the aggregated clients/commands.\n\n```javascript\n// this imports a bare-bones version of S3 that exposes the .send operation\nimport { S3Client } from \"@aws-sdk/client-s3\"\n\n// this imports just the getObject operation from S3\nimport { GetObjectCommand } from \"@aws-sdk/client-s3\"\n\n//usage\nconst bareBonesS3 = new S3Client({...});\nawait bareBonesS3.send(new GetObjectCommand({...}));\n```\n\n**Aggregated clients/commands**: This refers to a way of consuming clients that contain all operations on them. Under the hood this calls the bare-bones commands. This imports all commands on a particular client and results in more code being imported and thus less performant. This is 1:1 with v2's style.\n\n```javascript\n// this imports an aggregated version of S3 that exposes the .send operation\nimport { S3 } from \"@aws-sdk/client-s3\"\n\n// No need to import an operation as all operations are already on the S3 prototype\n\n//usage\nconst aggregatedS3 = new S3({...});\nawait aggregatedS3.getObject({...}));\n```\n\n### Generated Code\n\nThe v3 codebase is generated from internal AWS models that AWS services expose. We use [smithy-typescript](https://github.com/awslabs/smithy-typescript) to generate all code in the `/clients` subdirectory. These packages always have a prefix of `@aws-sdk/client-XXXX` and are one-to-one with AWS services and service operations. You should be importing `@aws-sdk/client-XXXX` for most usage.\n\nClients depend on common \"utility\" code in `/packages`. The code in `/packages` is manually written and outside of special cases (like credentials or abort controller) is generally not very useful alone.\n\nLastly, we have higher level libraries in `/lib`. These are javascript specific libraries that wrap client operations to make them easier to work with. Popular examples are `@aws-sdk/lib-dynamodb` which [simplifies working with items in Amazon DynamoDB](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-dynamodb/README.md) or `@aws-sdk/lib-storage` which exposes the `Upload` function and [simplifies parallel uploads in S3's multipartUpload](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage/README.md).\n\n1. `/packages`. This sub directory is where most manual code updates are done. These are published to NPM under `@aws-sdk/XXXX` and have no special prefix.\n1. `/clients`. This sub directory is code generated and depends on code published from `/packages` . It is 1:1 with AWS services and operations. Manual edits should generally not occur here. These are published to NPM under `@aws-sdk/client-XXXX`.\n1. `/lib`. This sub directory depends on generated code published from `/clients`. It wraps existing AWS services and operations to make them easier to work with in Javascript. These are published to NPM under `@aws-sdk/lib-XXXX`\n\n### Streams\n\nCertain command outputs include streams, which have different implementations in\nNode.js and browsers. For convenience, a set of stream handling methods will be\nmerged (`Object.assign`) to the output stream object, as defined in\n[SdkStreamMixin][serde-code-url].\n\nOutput types having this feature will be indicated by the `WithSdkStreamMixin\u003cT, StreamKey\u003e`\n[wrapper type][serde-code-url], where `T` is the original output type\nand `StreamKey` is the output property key having a stream type specific to\nthe runtime environment.\n\n[serde-code-url]: https://github.com/aws/aws-sdk-js-v3/blob/main/packages/types/src/serde.ts\n\nHere is an example using `S3::GetObject`.\n\n```js\nimport { S3 } from \"@aws-sdk/client-s3\";\n\nconst client = new S3({});\n\nconst getObjectResult = await client.getObject({\n  Bucket: \"...\",\n  Key: \"...\",\n});\n\n// env-specific stream with added mixin methods.\nconst bodyStream = getObjectResult.Body;\n\n// one-time transform.\nconst bodyAsString = await bodyStream.transformToString();\n\n// throws an error on 2nd call, stream cannot be rewound.\nconst __error__ = await bodyStream.transformToString();\n```\n\nNote that these methods will read the stream in order to collect it,\nso **you must save the output**. The methods cannot be called more than once\non a stream.\n\n### Paginators\n\nMany AWS operations return paginated results when the response object is too large to return in a single response. In AWS SDK for JavaScript v2, the response contains a token you can use to retrieve the next page of results. You then need to write additional functions to process pages of results.\n\nIn AWS SDK for JavaScript v3, we’ve improved pagination using async generator functions, which are similar to generator functions, with the following differences:\n\n- When called, async generator functions return an object, an async generator whose methods (`next`, `throw`, and `return`) return promises for `{ `value`, `done` }`, instead of directly returning `{ `value`, `done` }`. This automatically makes the returned async generator objects async iterators.\n- await expressions and `for await (x of y)` statements are allowed.\n- The behavior of `yield*` is modified to support delegation to async iterables.\n\nThe Async Iterators were added in the ES2018 iteration of JavaScript. They are supported by Node.js 10.x+ and by all modern browsers, including Chrome 63+, Firefox 57+, Safari 11.1+, and Edge 79+. If you’re using TypeScript v2.3+, you can compile Async Iterators to older versions of JavaScript.\n\nAn async iterator is much like an iterator, except that its `next()` method returns a promise for a `{ `value`, `done` }` pair. As an implicit aspect of the Async Iteration protocol, the next promise is not requested until the previous one resolves. This is a simple, yet a very powerful pattern.\n\n#### Example Pagination Usage\n\nIn v3, the clients expose paginateOperationName APIs that are written using async generators, allowing you to use async iterators in a for await..of loop. You can perform the paginateListTables operation from `@aws-sdk/client-dynamodb` as follows:\n\n```javascript\nconst {\n  DynamoDBClient,\n  paginateListTables,\n} = require(\"@aws-sdk/client-dynamodb\");\n\n...\nconst paginatorConfig = {\n  client: new DynamoDBClient({}),\n  pageSize: 25\n};\nconst commandParams = {};\nconst paginator = paginateListTables(paginatorConfig, commandParams);\n\nconst tableNames = [];\nfor await (const page of paginator) {\n  // page contains a single paginated output.\n  tableNames.push(...page.TableNames);\n}\n...\n\n```\n\nOr simplified:\n\n```javascript\n...\nconst client = new DynamoDBClient({});\n\nconst tableNames = [];\nfor await (const page of paginateListTables({ client }, {})) {\n    // page contains a single paginated output.\n    tableNames.push(...page.TableNames);\n}\n...\n```\n\n### Abort Controller\n\nIn v3, we support the AbortController interface which allows you to abort requests as and when desired.\n\nThe [AbortController Interface](https://dom.spec.whatwg.org/#interface-abortcontroller) provides an `abort()` method that toggles the state of a corresponding AbortSignal object. Most APIs accept an AbortSignal object, and respond to `abort()` by rejecting any unsettled promise with an “AbortError”.\n\n```javascript\n// Returns a new controller whose signal is set to a newly created AbortSignal object.\nconst controller = new AbortController();\n\n// Returns the AbortSignal object associated with controller.\nconst signal = controller.signal;\n\n// Invoking this method will set controller’s AbortSignal's aborted flag\n// and signal to any observers that the associated activity is to be aborted.\ncontroller.abort();\n```\n\n#### AbortController Usage\n\nIn JavaScript SDK v3, we added an implementation of WHATWG AbortController interface in `@aws-sdk/abort-controller`. To use it, you need to send `AbortController.signal` as `abortSignal` in the httpOptions parameter when calling `.send()` operation on the client as follows:\n\n```javascript\nconst { AbortController } = require(\"@aws-sdk/abort-controller\");\nconst { S3Client, CreateBucketCommand } = require(\"@aws-sdk/client-s3\");\n\n...\n\nconst abortController = new AbortController();\nconst client = new S3Client(clientParams);\n\nconst requestPromise = client.send(new CreateBucketCommand(commandParams), {\n  abortSignal: abortController.signal,\n});\n\n// The abortController can be aborted any time.\n// The request will not be created if abortSignal is already aborted.\n// The request will be destroyed if abortSignal is aborted before response is returned.\nabortController.abort();\n\n// This will fail with \"AbortError\" as abortSignal is aborted.\nawait requestPromise;\n```\n\n#### AbortController Example\n\nThe following code snippet shows how to upload a file using S3's putObject API in the browser with support to abort the upload. First, create a controller using the `AbortController()` constructor, then grab a reference to its associated AbortSignal object using the AbortController.signal property. When the `PutObjectCommand` is called with `.send()` operation, pass in AbortController.signal as abortSignal in the httpOptions parameter. This will allow you to abort the PutObject operation by calling `abortController.abort()`.\n\n```javascript\nconst abortController = new AbortController();\nconst abortSignal = abortController.signal;\n\nconst uploadBtn = document.querySelector('.upload');\nconst abortBtn = document.querySelector('.abort');\n\nuploadBtn.addEventListener('click', uploadObject);\n\nabortBtn.addEventListener('click', function() {\n  abortController.abort();\n  console.log('Upload aborted');\n});\n\nconst uploadObject = async (file) =\u003e {\n  ...\n  const client = new S3Client(clientParams);\n  try {\n    await client.send(new PutObjectCommand(commandParams), { abortSignal });\n  } catch(e) {\n    if (e.name === \"AbortError\") {\n      uploadProgress.textContent = 'Upload aborted: ' + e.message;\n    }\n    ...\n  }\n}\n```\n\nFor a full abort controller deep dive, please check out our [blog post](https://aws.amazon.com/blogs/developer/abortcontroller-in-modular-aws-sdk-for-javascript/).\n\n### Middleware Stack\n\nThe AWS SDK for JavaScript (v3) maintains a series of asynchronous actions. These series include actions that serialize input parameters into the data over the wire and deserialize response data into JavaScript objects. Such actions are implemented using functions called middleware and executed in a specific order. The object that hosts all the middleware including the ordering information is called a Middleware Stack. You can add your custom actions to the SDK and/or remove the default ones.\n\nWhen an API call is made, SDK sorts the middleware according to the step it belongs to and its priority within each step. The input parameters pass through each middleware. An HTTP request gets created and updated along the process. The HTTP Handler sends a request to the service, and receives a response. A response object is passed back through the same middleware stack in reverse, and is deserialized into a JavaScript object.\n\nA middleware is a higher-order function that transfers user input and/or HTTP request, then delegates to “next” middleware. It also transfers the result from “next” middleware. A middleware function also has access to context parameter, which optionally contains data to be shared across middleware.\n\nFor example, you can use middleware to log or modify a request:\n\n```javascript\nconst { S3 } = require(\"@aws-sdk/client-s3\");\nconst client = new S3({ region: \"us-west-2\" });\n\n// Middleware added to client, applies to all commands.\nclient.middlewareStack.add(\n  (next, context) =\u003e async (args) =\u003e {\n    args.request.headers[\"x-amz-meta-foo\"] = \"bar\";\n    console.log(\"AWS SDK context\", context.clientName, context.commandName);\n    console.log(\"AWS SDK request input\", args.input);\n    const result = await next(args);\n    console.log(\"AWS SDK request output:\", result.output);\n    return result;\n  },\n  {\n    step: \"build\",\n    name: \"addFooMetadataMiddleware\",\n    tags: [\"METADATA\", \"FOO\"],\n    override: true,\n  }\n);\n\nawait client.putObject(params);\n```\n\nSpecifying the absolute location of your middleware\nThe example above adds middleware to `build` step of middleware stack. The middleware stack contains five steps to manage a request’s lifecycle:\n\n- The **initialize** lifecycle step initializes an API call. This step typically adds default input values to a command. The HTTP request has not yet been constructed.\n- The **serialize** lifecycle step constructs an HTTP request for the API call. Example of typical serialization tasks include input validation and building an HTTP request from user input. The downstream middleware will have access to serialized HTTP request object in callback’s parameter `args.request`.\n- The **build** lifecycle step builds on top of serialized HTTP request. Examples of typical build tasks include injecting HTTP headers that describe a stable aspect of the request, such as `Content-Length` or a body checksum. Any request alterations will be applied to all retries.\n- The **finalizeRequest** lifecycle step prepares the request to be sent over the wire. The request in this stage is semantically complete and should therefore only be altered to match the recipient’s expectations. Examples of typical finalization tasks include request signing, performing retries and injecting hop-by-hop headers.\n- The **deserialize** lifecycle step deserializes the raw response object to a structured response. The upstream middleware have access to deserialized data in next callbacks return value: `result.output`.\n  Each middleware must be added to a specific step. By default, each middleware in the same step has undifferentiated order. In some cases, you might want to execute a middleware before or after another middleware in the same step. You can achieve it by specifying its `priority`.\n\n```javascript\nclient.middlewareStack.add(middleware, {\n  name: \"MyMiddleware\",\n  step: \"initialize\",\n  priority: \"high\", // or \"low\".\n  override: true, // provide both a name and override=true to avoid accidental middleware duplication.\n});\n```\n\nFor a full middleware stack deep dive, please check out our [blog post](https://aws.amazon.com/blogs/developer/middleware-stack-modular-aws-sdk-js/).\n\n## Release Cadence\n\nOur releases usually happen once per weekday. Each release increments the\nminor version, e.g. 3.200.0 -\u003e 3.201.0.\n\n## \u003ca id=\"nodejs-versions\"\u003e\u003c/a\u003e Node.js versions\n\nv3.723.0 and higher requires Node.js \u003e= 18.\n\nv3.567.0 and higher requires Node.js \u003e= 16.\n\nv3.201.0 and higher requires Node.js \u003e= 14.\n\nv3.46.0 to v3.200.0 requires Node.js \u003e= 12.\n\nEarlier versions require Node.js \u003e= 10.\n\n## Stability of Modular Packages\n\n| Package name                | containing folder | API controlled by | stability     |\n| --------------------------- | ----------------- | ----------------- | ------------- |\n| @aws-sdk/client-\\* Commands | clients           | AWS service teams | public/stable |\n| @aws-sdk/client-\\* Clients  | clients           | AWS SDK JS team   | public/stable |\n| @aws-sdk/lib-\\*             | lib               | AWS SDK JS team   | public/stable |\n| @aws-sdk/\\*-signer          | packages          | AWS SDK JS team   | public/stable |\n| @aws-sdk/middleware-stack   | packages          | AWS SDK JS team   | public/stable |\n| remaining @aws-sdk/\\*       | packages          | AWS SDK JS team   | internal      |\n\nPublic interfaces are marked with the `@public` annotation in source code and appear\nin our [API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/).\n\nAdditional notes:\n\n- `@internal` does not mean a package or interface is constantly changing\n  or being actively worked on. It means it is subject to change without any\n  notice period. The changes are included in the release notes.\n- public interfaces such as client configuration are also subject to change\n  in exceptional cases. We will try to undergo a deprecation period with\n  an advance notice.\n\nAll supported interfaces are provided at the package level, e.g.:\n\n```js\nimport { S3Client } from \"@aws-sdk/client-s3\"; // Yes, do this.\n\nimport { S3Client } from \"@aws-sdk/client-s3/dist-cjs/S3Client\"; // No, don't do this.\n```\n\nDo not import from a deep path in any package, since the file structure may change, and\nin the future packages may include the `exports` metadata in `package.json` preventing\naccess to the file structure.\n\n## Known Issues\n\n### Functionality requiring AWS Common Runtime (CRT)\n\nThis SDK has optional functionality that requires the [AWS Common Runtime (CRT)](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html)\nbindings to be included as a dependency with your application. This functionality includes:\n\n- [Amazon S3 Multi-Region Access Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPoints.html)\n- [Amazon S3 Object Integrity](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html)\n- [Amazon CloudFront-KeyValueStore](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/kvs-with-functions-kvp.html)\n- [Amazon S3 CRC64-NVME checksums](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html)\n\nIf the required AWS Common Runtime components are not installed, you will receive an error like:\n\n```console\nCannot find module '@aws-sdk/signature-v4-crt'\n...\nPlease check whether you have installed the \"@aws-sdk/signature-v4-crt\" package explicitly.\nYou must also register the package by calling [require(\"@aws-sdk/signature-v4-crt\");]\nor an ESM equivalent such as [import \"@aws-sdk/signature-v4-crt\";].\nFor more information please go to\nhttps://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt\"\n```\n\nindicating that the required dependency is missing to use the associated functionality. To install this dependency, follow\nthe provided [instructions](#installing-the-aws-common-runtime-crt-dependency).\n\n#### Installing the AWS Common Runtime (CRT) Dependency\n\nYou can install the CRT dependency with different commands depending on the package management tool you are using.\nIf you are using NPM:\n\n```console\nnpm install @aws-sdk/signature-v4-crt\n```\n\nIf you are using Yarn:\n\n```console\nyarn add @aws-sdk/signature-v4-crt\n```\n\nAdditionally, load the signature-v4-crt package by importing it.\n\n```js\nrequire(\"@aws-sdk/signature-v4-crt\");\n// or ESM\nimport \"@aws-sdk/signature-v4-crt\";\n```\n\nOnly the import statement is needed. The implementation then registers itself with `@aws-sdk/signature-v4-multi-region`\nand becomes available for its use. You do not need to use any imported objects directly.\n\n#### Related issues\n\n1. [S3 Multi-Region Access Point(MRAP) is not available unless with additional dependency](https://github.com/aws/aws-sdk-js-v3/issues/2822)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faws%2Faws-sdk-js-v3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faws%2Faws-sdk-js-v3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faws%2Faws-sdk-js-v3/lists"}