Compare commits

..

151 Commits

Author SHA1 Message Date
AWS SDKs and Tools bot cbe3b39273 chore(main): release 6.2.4 (#1942)
Co-authored-by: Tom Keller <1083460+kellertk@users.noreply.github.com>
2026-08-31 23:17:23 +00:00
dependabot[bot] 58065db07c chore(deps): bump js-yaml (#1944)
Bumps  and [js-yaml](https://github.com/nodeca/js-yaml). These dependencies needed to be updated together.

Updates `js-yaml` from 4.2.0 to 4.3.2
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.2/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.2)

Updates `js-yaml` from 5.2.1 to 5.2.3
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.2/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.2)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.2
  dependency-type: indirect
- dependency-name: js-yaml
  dependency-version: 5.2.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-31 22:25:41 +00:00
GitHub Actions 609df23709 chore: Update dist 2026-08-31 21:48:01 +00:00
Tom Keller aa6526434b fix: account-ids handling, mask proxy as secret in logs (#1943)
* fix: enforce allowed-account-ids when the list contains empty entries

An empty first element previously short-circuited the allowed account
check. Empty entries are now filtered out and validation applies
whenever any non-empty entry exists.

* fix: enforce allowed-account-ids on the use-existing-credentials path

The early return for valid pre-existing credentials skipped the
allowed-account-ids check, now included.

* fix: reject newlines in names and values when writing profile files

If the profile file writing was enabled, we emitted newlines into the
file verbatim, permitting injecting arbitrary profiles into the file.
Writing now fails instead.

* fix: honor configured STS endpoint for "ambient" credentials

Ambient credential resolution built a bare STS client, so a web-identity
token found by the SDK default chain (e.g. AWS_WEB_IDENTITY_TOKEN_FILE on
a self-hosted runner) was exchanged with public STS instead of any
operator-configured sts-endpoint. Resolution now passes the configured
region, endpoint, and proxy handler to the default provider chain.

* fix: mask proxy URL credentials in job logs

Basic-auth userinfo in the http-proxy input or HTTP(S)_PROXY environment
variables was never registered as a secret, so error messages carrying
the proxy URL printed the credentials unmasked in the job log.

* fix: omit account IDs from the allowed-account-ids failure message

The mismatch error is thrown before exportAccountId registers the
account-id mask, so setFailed wrote the raw account ID (and the
configured allow-list) into a public annotation. (C4)

* chore: remove outdated examples

All of the examples were out of date and we do not have a mechanism for
keeping them up to date. Removed the examples.
2026-08-31 14:31:24 -07:00
GitHub Actions 7fdbbb8968 chore: Update dist 2026-08-28 18:06:56 +00:00
Zhiwei Liang 3852440c21 fix: skip backoff sleep after the final retryAndBackoff attempt (#1937)
Signed-off-by: Zhiwei Liang <zhiwei.liang@zliang.me>
Co-authored-by: Joseph Klix <jkl@amazon.com>
2026-08-28 18:03:00 +00:00
Joseph Klix c16f89bdf4 mention renamed repos use the new immutable identifiers (#1941) 2026-08-28 10:19:03 -07:00
GitHub Actions 9c362eeba7 chore: Update dist 2026-08-25 03:55:51 +00:00
dependabot[bot] d5f8da8822 chore(deps): bump @aws-sdk/client-sts from 3.1111.0 to 3.1116.0 (#1935)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1111.0 to 3.1116.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1116.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1116.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 03:55:13 +00:00
GitHub Actions 2db24970cf chore: Update dist 2026-08-25 03:52:10 +00:00
dependabot[bot] 58c3b6e457 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1931)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.69 to 3.972.70.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.70
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 03:51:47 +00:00
GitHub Actions 2630a7c30d chore: Update dist 2026-08-25 03:49:44 +00:00
dependabot[bot] 9cb796df96 chore(deps): bump @smithy/node-http-handler from 4.11.0 to 4.11.3 (#1934)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.11.0 to 4.11.3.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.11.3/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 03:49:13 +00:00
dependabot[bot] 9def7f603e chore(deps-dev): bump @biomejs/biome from 2.5.8 to 2.5.10 (#1933)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.8 to 2.5.10.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.10/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 03:47:39 +00:00
dependabot[bot] f5c3a50aab chore(deps): bump brace-expansion (#1936)
Bumps  and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together.

Updates `brace-expansion` from 5.0.5 to 5.0.9
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.5...v5.0.9)

Updates `brace-expansion` from 1.1.14 to 1.1.18
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.5...v5.0.9)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 5.0.9
  dependency-type: indirect
- dependency-name: brace-expansion
  dependency-version: 1.1.18
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 03:46:13 +00:00
GitHub Actions 64cf66c882 chore: Update dist 2026-08-25 03:44:43 +00:00
dependabot[bot] af68a47c78 chore(deps-dev): bump @smithy/property-provider from 4.5.0 to 4.5.2 (#1929)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.5.0 to 4.5.2.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.5.2/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.5.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 03:44:13 +00:00
GitHub Actions bcd4089080 chore: Update dist 2026-08-18 04:00:07 +00:00
dependabot[bot] 721b15f0ee chore(deps): bump @aws-sdk/client-sts from 3.1106.0 to 3.1111.0 (#1928)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1106.0 to 3.1111.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1111.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1111.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:59:35 +00:00
dependabot[bot] 0e771c8069 chore(deps-dev): bump esbuild from 0.28.1 to 0.28.2 (#1924)
Bumps [esbuild](https://github.com/evanw/esbuild) from 0.28.1 to 0.28.2.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.28.1...v0.28.2)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:56:20 +00:00
dependabot[bot] 6e36582a90 chore(deps-dev): bump @smithy/property-provider from 4.4.16 to 4.5.0 (#1922)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.16 to 4.5.0.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.5.0/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:53:20 +00:00
dependabot[bot] 7a26c6cbd2 chore(deps-dev): bump memfs from 4.68.0 to 4.68.1 (#1927)
Bumps [memfs](https://github.com/streamich/memfs) from 4.68.0 to 4.68.1.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.68.0...v4.68.1)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.68.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:51:04 +00:00
GitHub Actions 83c855008c chore: Update dist 2026-08-18 03:49:31 +00:00
dependabot[bot] e2c213d5f6 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1926)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.68 to 3.972.69.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.69
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:49:01 +00:00
GitHub Actions fd3f78a69a chore: Update dist 2026-08-18 03:47:26 +00:00
dependabot[bot] ab089d1087 chore(deps): bump @smithy/node-http-handler from 4.9.13 to 4.11.0 (#1925)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.9.13 to 4.11.0.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/types@4.11.0/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:46:51 +00:00
dependabot[bot] 0ea2ab0d82 chore(deps-dev): bump @biomejs/biome from 2.5.7 to 2.5.8 (#1923)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.7 to 2.5.8.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.8/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 03:43:57 +00:00
GitHub Actions 12d377b18d chore: Update dist 2026-08-12 21:51:34 +00:00
dependabot[bot] 3f6acccbef chore(deps): bump @aws-sdk/client-sts from 3.1101.0 to 3.1106.0 (#1919)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1101.0 to 3.1106.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1106.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1106.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 21:50:57 +00:00
dependabot[bot] 9f178b3b31 chore(deps-dev): bump @biomejs/biome from 2.5.6 to 2.5.7 (#1917)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.6 to 2.5.7.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.7/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 21:47:59 +00:00
GitHub Actions 4c029bab3d chore: Update dist 2026-08-12 21:44:38 +00:00
dependabot[bot] 15313a702c chore(deps-dev): bump @aws-sdk/credential-provider-env (#1918)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.66 to 3.972.67.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.67
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 21:44:08 +00:00
dependabot[bot] c52a2eac0d chore(deps-dev): bump @types/node from 26.1.2 to 26.2.0 (#1916)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.1.2 to 26.2.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 21:39:03 +00:00
dependabot[bot] 87f905da14 chore(deps-dev): bump memfs from 4.64.0 to 4.68.0 (#1920)
Bumps [memfs](https://github.com/streamich/memfs) from 4.64.0 to 4.68.0.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.64.0...v4.68.0)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.68.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Michael Lehmann <lehmanmj@amazon.com>
2026-08-12 21:26:40 +00:00
Tom Keller ba7d3485af chore: clarify issue template policy (#1921) 2026-08-12 10:13:32 -07:00
Tom Keller 0802eece3e chore: bump stale-issue-cleanup to v7 (#1914) 2026-08-04 11:56:48 -07:00
GitHub Actions b04158f834 chore: Update dist 2026-08-04 03:58:29 +00:00
dependabot[bot] bc56d889a4 chore(deps): bump undici from 6.27.0 to 6.28.0 (#1913)
Bumps [undici](https://github.com/nodejs/undici) from 6.27.0 to 6.28.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.27.0...v6.28.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.28.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:58:00 +00:00
dependabot[bot] a5fc44c8bc chore(deps-dev): bump @smithy/property-provider from 4.4.15 to 4.4.16 (#1908)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.15 to 4.4.16.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.16/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:55:10 +00:00
GitHub Actions e6bb36664c chore: Update dist 2026-08-04 03:53:40 +00:00
dependabot[bot] c39789ae94 chore(deps): bump @aws-sdk/client-sts from 3.1096.0 to 3.1101.0 (#1911)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1096.0 to 3.1101.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1101.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1101.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:53:07 +00:00
GitHub Actions 533ad3f138 chore: Update dist 2026-08-04 03:50:45 +00:00
dependabot[bot] 5a98413048 chore(deps): bump @smithy/node-http-handler from 4.9.12 to 4.9.13 (#1910)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.9.12 to 4.9.13.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.9.13/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.9.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:50:18 +00:00
dependabot[bot] 6d65716bae chore(deps-dev): bump @biomejs/biome from 2.5.5 to 2.5.6 (#1909)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.5 to 2.5.6.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.6/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:48:15 +00:00
GitHub Actions 1d168a55fe chore: Update dist 2026-08-04 03:45:58 +00:00
dependabot[bot] 848d062284 chore(deps): bump ip-address from 10.2.0 to 10.4.0 (#1912)
Bumps [ip-address](https://github.com/beaugunderson/ip-address) from 10.2.0 to 10.4.0.
- [Release notes](https://github.com/beaugunderson/ip-address/releases)
- [Commits](https://github.com/beaugunderson/ip-address/compare/v10.2.0...v10.4.0)

---
updated-dependencies:
- dependency-name: ip-address
  dependency-version: 10.4.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:45:29 +00:00
GitHub Actions d3194f48b9 chore: Update dist 2026-08-04 03:44:21 +00:00
dependabot[bot] 61c52b4114 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1907)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.62 to 3.972.65.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.65
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 03:43:47 +00:00
GitHub Actions 91d3095422 chore: Update dist 2026-07-28 03:56:46 +00:00
dependabot[bot] 43a31ecb43 chore(deps): bump @aws-sdk/client-sts from 3.1091.0 to 3.1096.0 (#1904)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1091.0 to 3.1096.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1096.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1096.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 03:56:10 +00:00
GitHub Actions 13db8f061e chore: Update dist 2026-07-28 03:54:33 +00:00
dependabot[bot] 7b65d1d5f3 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1906)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.59 to 3.972.62.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.62
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 03:53:58 +00:00
dependabot[bot] 49a3467caa chore(deps-dev): bump @types/node from 26.1.1 to 26.1.2 (#1902)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.1.1 to 26.1.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 03:51:42 +00:00
dependabot[bot] f0a75f4173 chore(deps-dev): bump @biomejs/biome from 2.5.4 to 2.5.5 (#1905)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.4 to 2.5.5.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.5/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 03:48:57 +00:00
GitHub Actions 7d3d30aa06 chore: Update dist 2026-07-28 03:47:23 +00:00
dependabot[bot] 544de3bdd1 chore(deps): bump @smithy/node-http-handler from 4.9.8 to 4.9.12 (#1901)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.9.8 to 4.9.12.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.9.12/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.9.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 03:46:50 +00:00
GitHub Actions 63142d578f chore: Update dist 2026-07-28 03:44:31 +00:00
dependabot[bot] 33103b67c5 chore(deps-dev): bump @smithy/property-provider from 4.4.11 to 4.4.15 (#1903)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.11 to 4.4.15.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.15/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 03:44:00 +00:00
dependabot[bot] ebff9ed752 chore(deps-dev): bump postcss from 8.5.16 to 8.5.23 (#1900)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.16 to 8.5.23.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.16...8.5.23)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 05:28:50 +00:00
GitHub Actions 247bed75ed docs: update README version references to v6.2.3 2026-07-22 18:32:21 +00:00
AWS SDKs and Tools bot e6de054238 chore(main): release 6.2.3 (#1878) 2026-07-22 11:31:37 -07:00
GitHub Actions ab3b2ba025 chore: Update dist 2026-07-22 18:25:55 +00:00
Tom Keller fa8d6a57bb fix: PackedPolicyTooLarge detection in STS tags (#1899)
Closes #1898.

Due to a bundling, checking for `error instanceof
PackedPolicyTooLargeException` fails. Instead we need to explicitly
check for `error.name`.
2026-07-22 11:25:24 -07:00
dependabot[bot] 42e118a656 chore(deps-dev): bump markdownlint-cli from 0.49.0 to 0.49.1 (#1896)
Bumps [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) from 0.49.0 to 0.49.1.
- [Release notes](https://github.com/igorshubovych/markdownlint-cli/releases)
- [Commits](https://github.com/igorshubovych/markdownlint-cli/compare/v0.49.0...v0.49.1)

---
updated-dependencies:
- dependency-name: markdownlint-cli
  dependency-version: 0.49.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:59:29 +00:00
GitHub Actions d86ddfcecc chore: Update dist 2026-07-21 03:57:04 +00:00
dependabot[bot] 874aaac21e chore(deps): bump @aws-sdk/client-sts from 3.1086.0 to 3.1091.0 (#1892)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1086.0 to 3.1091.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1091.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1091.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:56:34 +00:00
GitHub Actions d4341b65ac chore: Update dist 2026-07-21 03:53:41 +00:00
dependabot[bot] fe51823c97 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1894)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.57 to 3.972.59.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.59
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:53:14 +00:00
dependabot[bot] a8be382115 chore(deps-dev): bump @biomejs/biome from 2.5.3 to 2.5.4 (#1893)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.3 to 2.5.4.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.4/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:50:42 +00:00
GitHub Actions e000376c2c chore: Update dist 2026-07-21 03:49:08 +00:00
dependabot[bot] c2828f8b08 chore(deps): bump @smithy/node-http-handler from 4.9.5 to 4.9.8 (#1895)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.9.5 to 4.9.8.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.9.8/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.9.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:48:36 +00:00
dependabot[bot] 20e62f617c chore(deps-dev): bump tar from 7.5.16 to 7.5.20 (#1897)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.16 to 7.5.20.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.16...v7.5.20)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.20
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:45:41 +00:00
GitHub Actions 66f02a3e6c chore: Update dist 2026-07-21 03:44:09 +00:00
dependabot[bot] 82a0ed2cab chore(deps-dev): bump @smithy/property-provider from 4.4.8 to 4.4.11 (#1891)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.8 to 4.4.11.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.11/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 03:43:35 +00:00
Tom Keller 9d2a1c17c0 chore(docs): document immutable OIDC subject claim (#1889)
GitHub made the OIDC `sub` claim immutable for repositories created on
github.com on or after 2026-04-23 (and older repos that opt in). The claim
now appends the numeric org and repository IDs after each name, separated by
`@`, e.g. `repo:org@123456/repo@789012:ref:refs/heads/main`.

Closes #1888.
2026-07-15 11:06:00 -07:00
GitHub Actions e977f476bf chore: Update dist 2026-07-14 03:59:59 +00:00
dependabot[bot] ab0d61f6a0 chore(deps): bump @aws-sdk/client-sts from 3.1080.0 to 3.1086.0 (#1880)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1080.0 to 3.1086.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1086.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1086.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:59:28 +00:00
GitHub Actions ccf493e3b1 chore: Update dist 2026-07-14 03:56:32 +00:00
dependabot[bot] 05ed620dc8 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1886)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.54 to 3.972.57.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.57
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:56:05 +00:00
dependabot[bot] 62f98f6930 chore(deps-dev): bump typescript from 6.0.3 to 7.0.2 (#1882)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 6.0.3 to 7.0.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 7.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:54:45 +00:00
dependabot[bot] 5a780d06ff chore(deps-dev): bump @smithy/property-provider from 4.4.6 to 4.4.8 (#1884)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.6 to 4.4.8.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.8/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:53:16 +00:00
dependabot[bot] d3cb30b08b chore(deps-dev): bump @biomejs/biome from 2.5.2 to 2.5.3 (#1885)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.2 to 2.5.3.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.3/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:51:27 +00:00
dependabot[bot] eb48debd38 chore(deps-dev): bump @types/node from 26.1.0 to 26.1.1 (#1881)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.1.0 to 26.1.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:48:33 +00:00
dependabot[bot] e69af16b6c chore(deps-dev): bump memfs from 4.58.0 to 4.64.0 (#1883)
Bumps [memfs](https://github.com/streamich/memfs) from 4.58.0 to 4.64.0.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.58.0...v4.64.0)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.64.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:46:28 +00:00
GitHub Actions 7fb20f0656 chore: Update dist 2026-07-14 03:44:06 +00:00
dependabot[bot] 4e7ae70130 chore(deps): bump @smithy/node-http-handler from 4.9.3 to 4.9.5 (#1879)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.9.3 to 4.9.5.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.9.5/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.9.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 03:43:32 +00:00
Tom Keller 9ae780b171 fix: attach git credentials before Tag Major Version push (#1877)
The Tag Major Version step ran 'git push origin' after Checkout Again
re-cloned with persist-credentials: false, leaving the remote without
credentials. This caused 'fatal: could not read Username' (exit 128) on
the first release. Set the authenticated remote URL using OSDS_ACCESS_TOKEN
before pushing tags, mirroring the Update README step.
2026-07-09 13:46:15 -07:00
AWS SDKs and Tools bot 517a711dbc chore(main): release 6.2.2 (#1876) 2026-07-07 09:59:05 -07:00
Tom Keller d01d678e65 chore: release 6.2.2
Release-As: 6.2.2
2026-07-07 09:56:53 -07:00
Tom Keller 8efa52b284 chore(deps-dev): bump vitest dependencies (#1874)
Combines dependabot PRs #1866 and #1865. Both packages must move
together because @vitest/coverage-v8 declares an exact peer dependency.
2026-07-07 09:46:57 -07:00
dependabot[bot] 8e1eed5c14 chore(deps-dev): bump @smithy/property-provider from 4.4.4 to 4.4.6 (#1869)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.4 to 4.4.6.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.6/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 03:54:34 +00:00
dependabot[bot] 112421a93a chore(deps-dev): bump @biomejs/biome from 2.5.1 to 2.5.2 (#1868)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.1 to 2.5.2.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.2/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 03:52:21 +00:00
dependabot[bot] fbc01c6585 chore(deps-dev): bump @types/node from 26.0.1 to 26.1.0 (#1871)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.0.1 to 26.1.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 03:49:34 +00:00
dependabot[bot] b12ca875eb chore(deps-dev): bump memfs from 4.57.8 to 4.58.0 (#1873)
Bumps [memfs](https://github.com/streamich/memfs) from 4.57.8 to 4.58.0.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.57.8...v4.58.0)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.58.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 03:47:23 +00:00
GitHub Actions d314f7f43d chore: Update dist 2026-07-07 03:44:54 +00:00
dependabot[bot] a53b65b84a chore(deps): bump @aws-sdk/client-sts from 3.1076.0 to 3.1080.0 (#1867)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1076.0 to 3.1080.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1080.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1080.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 03:44:23 +00:00
dependabot[bot] 338d2c1839 chore(deps-dev): bump sigstore from 4.1.0 to 4.1.1 (#1864)
Bumps [sigstore](https://github.com/sigstore/sigstore-js) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/sigstore@4.1.0...sigstore@4.1.1)

---
updated-dependencies:
- dependency-name: sigstore
  dependency-version: 4.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-02 02:43:47 +00:00
dependabot[bot] b94086889d chore(deps-dev): bump @sigstore/verify from 3.1.0 to 3.1.1 (#1863)
Bumps [@sigstore/verify](https://github.com/sigstore/sigstore-js) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/sigstore@3.1.0...@sigstore/verify@3.1.1)

---
updated-dependencies:
- dependency-name: "@sigstore/verify"
  dependency-version: 3.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-02 02:41:56 +00:00
dependabot[bot] 9df7c63a2f chore(deps-dev): bump @smithy/property-provider from 4.4.2 to 4.4.4 (#1862)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.2 to 4.4.4.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.4/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-30 03:53:53 +00:00
GitHub Actions c35a5960bf chore: Update dist 2026-06-30 03:51:16 +00:00
dependabot[bot] 187c14ee87 chore(deps): bump @aws-sdk/client-sts from 3.1075.0 to 3.1076.0 (#1858)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1075.0 to 3.1076.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1076.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1076.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-30 03:50:42 +00:00
GitHub Actions c403f3cb69 chore: Update dist 2026-06-30 03:48:55 +00:00
dependabot[bot] 08319dee24 chore(deps): bump @smithy/node-http-handler from 4.8.2 to 4.9.1 (#1860)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.8.2 to 4.9.1.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.9.1/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-30 03:48:25 +00:00
dependabot[bot] d2e2926774 chore(deps-dev): bump @biomejs/biome from 2.5.0 to 2.5.1 (#1859)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.5.0 to 2.5.1.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.1/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-30 03:46:20 +00:00
dependabot[bot] 90f23cf274 chore(deps-dev): bump @types/node from 26.0.0 to 26.0.1 (#1857)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.0.0 to 26.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-30 03:43:37 +00:00
dependabot[bot] 26d9fee367 chore(deps-dev): bump @sigstore/core from 3.2.0 to 3.2.1 (#1856)
Bumps [@sigstore/core](https://github.com/sigstore/sigstore-js) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/@sigstore/core@3.2.0...@sigstore/core@3.2.1)

---
updated-dependencies:
- dependency-name: "@sigstore/core"
  dependency-version: 3.2.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-29 17:05:38 +00:00
Michael Lehmann 6686d5a051 chore(docs): fix automated readme version bumping (#1850) 2026-06-26 14:54:03 -07:00
AWS SDKs and Tools bot 254c19bd24 chore(main): release 6.2.1 (#1849) 2026-06-26 14:23:45 -07:00
GitHub Actions a20cf827fe chore: Update dist 2026-06-26 20:42:54 +00:00
Tom Keller 4d281fbc56 fix: enforce allowed-account-ids on all auth paths (#1847)
* fix: enforce allowed-account-ids on all auth paths

The allowed-account-ids list was only enforced in some auth flows. This
was due to the check being included in validateCredentials, which was
skipped if (GITHUB_ACTIONS && AccessKeyId && output-env-credentials) ->
false.

This unifies credential validation into a single path.

- validateCredentials(credentials?, ...) resolves credentials, proves
  liveness via one GetCallerIdentity call, and returns the identity.
- validateAccountId(expectedAccountIds, account) is now a pure comparison
  against the resolved account, enforced against the final (assumed)
  account independent of auth method, GITHUB_ACTIONS, or
  output-env-credentials.
- exportAccountId(identity, ...) consumes the resolved identity instead of
  making its own GetCallerIdentity call, so credential resolution happens
  exactly once per credential set.

Pre-assume account checks remain gated on !roleToAssume so cross-account
assume-role (source account differs from the role's target) is preserved.

Adds regression tests for the OIDC wrong-account case (the previously
missing negative test), OIDC with output-env-credentials: false, and the
assume-role wrong-account case.

* chore: move validateAccountId into helpers
2026-06-26 13:33:19 -07:00
dependabot[bot] e004cdcd28 chore(deps-dev): bump @smithy/property-provider from 4.4.0 to 4.4.2 (#1845)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.4.0 to 4.4.2.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.2/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 04:00:00 +00:00
GitHub Actions 88aa3695d3 chore: Update dist 2026-06-23 03:56:47 +00:00
dependabot[bot] 687331b272 chore(deps): bump @aws-sdk/client-sts from 3.1069.0 to 3.1075.0 (#1841)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1069.0 to 3.1075.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1075.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1075.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 03:56:17 +00:00
GitHub Actions ea607be060 chore: Update dist 2026-06-23 03:53:50 +00:00
dependabot[bot] 6d136066d8 chore(deps): bump @smithy/node-http-handler from 4.8.0 to 4.8.2 (#1842)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.8.0 to 4.8.2.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.8.2/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 03:53:19 +00:00
GitHub Actions 71a32ae408 chore: Update dist 2026-06-23 03:51:40 +00:00
dependabot[bot] b290f2ca79 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1844)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.47 to 3.972.49.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.49
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 03:51:04 +00:00
dependabot[bot] 0cd4b34a9b chore(deps-dev): bump markdownlint-cli from 0.48.0 to 0.49.0 (#1843)
Bumps [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) from 0.48.0 to 0.49.0.
- [Release notes](https://github.com/igorshubovych/markdownlint-cli/releases)
- [Commits](https://github.com/igorshubovych/markdownlint-cli/compare/v0.48.0...v0.49.0)

---
updated-dependencies:
- dependency-name: markdownlint-cli
  dependency-version: 0.49.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 03:48:40 +00:00
dependabot[bot] e6e5af76de chore(deps-dev): bump @types/node from 25.9.3 to 26.0.0 (#1839)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.3 to 26.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 03:46:10 +00:00
dependabot[bot] 7089b3a41f chore(deps-dev): bump memfs from 4.57.7 to 4.57.8 (#1840)
Bumps [memfs](https://github.com/streamich/memfs) from 4.57.7 to 4.57.8.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.57.7...v4.57.8)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.57.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 03:43:28 +00:00
GitHub Actions 1a6323c7ef chore: Update dist 2026-06-22 21:25:17 +00:00
dependabot[bot] 8136aa1bcb chore(deps): bump undici from 6.25.0 to 6.27.0 (#1838)
Bumps [undici](https://github.com/nodejs/undici) from 6.25.0 to 6.27.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.25.0...v6.27.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.27.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-22 21:24:42 +00:00
Michael Lehmann ffffc0fe9d chore(deps-dev): switch prototype syntax in test, update vitest and biome (#1837) 2026-06-16 11:42:04 -07:00
GitHub Actions 93823cfbdc chore: Update dist 2026-06-16 03:58:44 +00:00
dependabot[bot] 7397aaead8 chore(deps): bump @aws-sdk/client-sts from 3.1064.0 to 3.1069.0 (#1832)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1064.0 to 3.1069.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1069.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1069.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:58:08 +00:00
GitHub Actions fc8f6a6abe chore: Update dist 2026-06-16 03:56:29 +00:00
dependabot[bot] 3c7bb1cb09 chore(deps-dev): bump @aws-sdk/credential-provider-env (#1830)
Bumps [@aws-sdk/credential-provider-env](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/credential-provider-env) from 3.972.45 to 3.972.47.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/credential-provider-env/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/credential-provider-env)

---
updated-dependencies:
- dependency-name: "@aws-sdk/credential-provider-env"
  dependency-version: 3.972.47
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:55:58 +00:00
dependabot[bot] 024bb07a82 chore(deps-dev): bump @types/node from 25.9.2 to 25.9.3 (#1829)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.2 to 25.9.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.9.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:53:23 +00:00
GitHub Actions 86c1acf81a chore: Update dist 2026-06-16 03:51:28 +00:00
dependabot[bot] 50c2567845 chore(deps): bump @smithy/node-http-handler from 4.7.7 to 4.8.0 (#1834)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.7.7 to 4.8.0.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.8.0/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:50:50 +00:00
dependabot[bot] 270cb5b1d9 chore(deps-dev): bump memfs from 4.57.6 to 4.57.7 (#1828)
Bumps [memfs](https://github.com/streamich/memfs) from 4.57.6 to 4.57.7.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.57.6...v4.57.7)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.57.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:48:47 +00:00
dependabot[bot] 51e8115730 chore(deps-dev): bump tar from 7.5.14 to 7.5.16 (#1836)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.14 to 7.5.16.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.14...v7.5.16)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:45:57 +00:00
GitHub Actions 7f56bcdc8b chore: Update dist 2026-06-16 03:44:17 +00:00
dependabot[bot] 357812ba85 chore(deps-dev): bump @smithy/property-provider from 4.3.6 to 4.4.0 (#1827)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.3.6 to 4.4.0.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/property-provider@4.4.0/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 03:43:40 +00:00
GitHub Actions 6a57fcec9b chore: Update dist 2026-06-13 01:07:33 +00:00
dependabot[bot] 11b91e35b6 chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 (#1826)
Bumps [esbuild](https://github.com/evanw/esbuild) from 0.28.0 to 0.28.1.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.28.0...v0.28.1)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-13 01:06:55 +00:00
GitHub Actions eeef317384 chore: Update dist 2026-06-09 03:52:09 +00:00
dependabot[bot] 586cfded7b chore(deps): bump @aws-sdk/client-sts from 3.1061.0 to 3.1064.0 (#1822)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1061.0 to 3.1064.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1064.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1064.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-09 03:51:35 +00:00
GitHub Actions ff89a791a6 chore: Update dist 2026-06-09 03:49:39 +00:00
dependabot[bot] c2036624d0 chore(deps): bump @smithy/node-http-handler from 4.7.6 to 4.7.7 (#1823)
Bumps [@smithy/node-http-handler](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler) from 4.7.6 to 4.7.7.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/node-http-handler/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/node-http-handler@4.7.7/packages/node-http-handler)

---
updated-dependencies:
- dependency-name: "@smithy/node-http-handler"
  dependency-version: 4.7.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-09 03:49:05 +00:00
GitHub Actions 68fa256f0b chore: Update dist 2026-06-09 03:47:18 +00:00
dependabot[bot] 97363c92bb chore(deps): bump proxy-agent from 8.0.1 to 8.0.2 (#1824)
Bumps [proxy-agent](https://github.com/TooTallNate/proxy-agents/tree/HEAD/packages/proxy-agent) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/TooTallNate/proxy-agents/releases)
- [Changelog](https://github.com/TooTallNate/proxy-agents/blob/main/packages/proxy-agent/CHANGELOG.md)
- [Commits](https://github.com/TooTallNate/proxy-agents/commits/proxy-agent@8.0.2/packages/proxy-agent)

---
updated-dependencies:
- dependency-name: proxy-agent
  dependency-version: 8.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-09 03:46:49 +00:00
dependabot[bot] 05c3e92d7e chore(deps-dev): bump @types/node from 25.9.1 to 25.9.2 (#1821)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.1 to 25.9.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.9.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-09 03:43:53 +00:00
dependabot[bot] 037dd16322 chore(deps-dev): bump @vitest/coverage-v8 from 4.1.5 to 4.1.8 (#1817)
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.5 to 4.1.8.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.8/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tom Keller <1083460+kellertk@users.noreply.github.com>
2026-06-03 22:06:07 +00:00
dependabot[bot] 89a34d9b83 chore(deps-dev): bump vitest from 4.1.5 to 4.1.8 (#1815)
* chore(deps-dev): bump vitest from 4.1.5 to 4.1.8

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.1.5 to 4.1.8.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.8/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps-dev): bump vitest and coverage-v8 to 4.1.8

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tom Keller <kellertk@amazon.com>
2026-06-03 22:04:30 +00:00
dependabot[bot] d63f12fba5 chore(deps-dev): bump memfs from 4.57.2 to 4.57.6 (#1813)
Bumps [memfs](https://github.com/streamich/memfs) from 4.57.2 to 4.57.6.
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.57.2...v4.57.6)

---
updated-dependencies:
- dependency-name: memfs
  dependency-version: 4.57.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 21:58:21 +00:00
dependabot[bot] aefb6ea018 chore(deps-dev): bump @smithy/property-provider from 4.3.5 to 4.3.6 (#1816)
Bumps [@smithy/property-provider](https://github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/property-provider) from 4.3.5 to 4.3.6.
- [Release notes](https://github.com/smithy-lang/smithy-typescript/releases)
- [Changelog](https://github.com/smithy-lang/smithy-typescript/blob/main/packages/property-provider/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-typescript/commits/@smithy/util-retry@4.3.6/packages/property-provider)

---
updated-dependencies:
- dependency-name: "@smithy/property-provider"
  dependency-version: 4.3.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 21:56:02 +00:00
GitHub Actions bf27562715 chore: Update dist 2026-06-03 21:53:30 +00:00
dependabot[bot] 4f3ef32554 chore(deps): bump @aws-sdk/client-sts from 3.1049.0 to 3.1061.0 (#1814)
Bumps [@aws-sdk/client-sts](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-sts) from 3.1049.0 to 3.1061.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-sts/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1061.0/clients/client-sts)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-sts"
  dependency-version: 3.1061.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 21:52:58 +00:00
dependabot[bot] 26b365ff2f chore(deps-dev): bump @biomejs/biome from 2.4.15 to 2.4.16 (#1811)
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.4.15 to 2.4.16.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.16/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.4.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 21:50:30 +00:00
dependabot[bot] 262ce4cfb5 chore(deps-dev): bump generate-license-file from 4.1.1 to 4.2.1 (#1812)
Bumps [generate-license-file](https://github.com/TobyAndToby/generate-license-file/tree/HEAD/src/packages/generate-license-file) from 4.1.1 to 4.2.1.
- [Release notes](https://github.com/TobyAndToby/generate-license-file/releases)
- [Commits](https://github.com/TobyAndToby/generate-license-file/commits/v4.2.1/src/packages/generate-license-file)

---
updated-dependencies:
- dependency-name: generate-license-file
  dependency-version: 4.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 21:47:33 +00:00
28 changed files with 11711 additions and 11285 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Stale issue job name: Stale issue job
steps: steps:
- uses: aws-actions/stale-issue-cleanup@v6 - uses: aws-actions/stale-issue-cleanup@v7
with: with:
# Setting messages to an empty string will cause the automation to skip # Setting messages to an empty string will cause the automation to skip
# that category # that category
+3
View File
@@ -48,12 +48,15 @@
uses: actions/checkout@v5 uses: actions/checkout@v5
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false
- name: Tag Major Version - name: Tag Major Version
if: ${{ steps.release.outputs.release_created }} if: ${{ steps.release.outputs.release_created }}
run: | run: |
git config user.name "GitHub Actions" git config user.name "GitHub Actions"
git config user.email "github-aws-sdk-osds-automation@amazon.com" git config user.email "github-aws-sdk-osds-automation@amazon.com"
echo "::add-mask::${{ env.OSDS_ACCESS_TOKEN }}"
git remote set-url origin https://${{ env.OSDS_ACCESS_TOKEN }}@github.com/aws-actions/configure-aws-credentials.git
if git rev-parse "v${{ steps.release.outputs.major }}" >/dev/null 2>&1; then if git rev-parse "v${{ steps.release.outputs.major }}" >/dev/null 2>&1; then
git tag -d "v${{ steps.release.outputs.major }}" git tag -d "v${{ steps.release.outputs.major }}"
git push origin ":v${{ steps.release.outputs.major }}" git push origin ":v${{ steps.release.outputs.major }}"
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
".release-please-manifest.json": "4.0.2", ".release-please-manifest.json": "4.0.2",
"package.json": "6.0.0", "package.json": "6.0.0",
".": "6.2.0" ".": "6.2.4"
} }
+30
View File
@@ -2,6 +2,36 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [6.2.4](https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.3...v6.2.4) (2026-08-31)
### Bug Fixes
* account-ids handling, mask proxy as secret in logs ([#1943](https://github.com/aws-actions/configure-aws-credentials/issues/1943)) ([aa65264](https://github.com/aws-actions/configure-aws-credentials/commit/aa6526434b08748f8776b29964e3f1f5d90e7b63))
* skip backoff sleep after the final retryAndBackoff attempt ([#1937](https://github.com/aws-actions/configure-aws-credentials/issues/1937)) ([3852440](https://github.com/aws-actions/configure-aws-credentials/commit/3852440c21363386b7b790605685d08a7c1a4876))
## [6.2.3](https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.2...v6.2.3) (2026-07-22)
### Bug Fixes
* attach git credentials before Tag Major Version push ([#1877](https://github.com/aws-actions/configure-aws-credentials/issues/1877)) ([9ae780b](https://github.com/aws-actions/configure-aws-credentials/commit/9ae780b171afa8c5a3a6a2d154a765b709492482))
* PackedPolicyTooLarge detection in STS tags ([#1899](https://github.com/aws-actions/configure-aws-credentials/issues/1899)) ([fa8d6a5](https://github.com/aws-actions/configure-aws-credentials/commit/fa8d6a57bbf44b34439fb080bbdadc7c92c285eb))
## [6.2.2](https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.1...v6.2.2) (2026-07-07)
### Miscellaneous Chores
* release 6.2.2 ([d01d678](https://github.com/aws-actions/configure-aws-credentials/commit/d01d678e65d6d2bd9d5ca7a95d6f07b00e25f2c2))
## [6.2.1](https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.0...v6.2.1) (2026-06-26)
### Bug Fixes
* enforce allowed-account-ids on all auth paths ([#1847](https://github.com/aws-actions/configure-aws-credentials/issues/1847)) ([4d281fb](https://github.com/aws-actions/configure-aws-credentials/commit/4d281fbc56a82e63c3fc14f2cc22361f34c97493))
## [6.2.0](https://github.com/aws-actions/configure-aws-credentials/compare/v6.1.3...v6.2.0) (2026-06-01) ## [6.2.0](https://github.com/aws-actions/configure-aws-credentials/compare/v6.1.3...v6.2.0) (2026-06-01)
### Features ### Features
+6
View File
@@ -28,6 +28,12 @@ these are incredibly useful:
- Any modifications you've made relevant to the bug - Any modifications you've made relevant to the bug
- Anything unusual about your environment or deployment - Anything unusual about your environment or deployment
We also ask that you refrain from opening issues via the `gh` CLI or GitHub
API. These methods bypass our issue templates and therefore don't apply the
proper labels or workflows that we use. Note that AI agents typically do not
properly use issue templates. Issues that don't have the proper labels
applied may be closed without comment.
## Contributing via Pull Requests ## Contributing via Pull Requests
Contributions via pull requests are much appreciated. Before sending us a pull Contributions via pull requests are much appreciated. Before sending us a pull
+58 -26
View File
@@ -26,7 +26,7 @@ Authenticate to AWS in GitHub Actions (and others)! Works especially well with
"Condition": { "Condition": {
"StringEquals": { "StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
"token.actions.githubusercontent.com:sub": "repo:<GITHUB_ORG>/<GITHUB_REPOSITORY>:ref:refs/heads/<GITHUB_BRANCH>" "token.actions.githubusercontent.com:sub": "repo:<GITHUB_ORG>@<ORG_ID>/<GITHUB_REPOSITORY>@<REPO_ID>:ref:refs/heads/<GITHUB_BRANCH>"
} }
} }
} }
@@ -36,11 +36,16 @@ Authenticate to AWS in GitHub Actions (and others)! Works especially well with
</details> </details>
Note: if you are running in a GitHub environment based workflow, the value Note: The value of the `sub` claim may be different depending on the workflow
for the Sub claim will be different, in the form of and the environment in which it's running. Workflows in repositories created
`repo:<GITHUB_ORG>/<GITHUB_REPOSITORY>:environment:<ENVIRONMENT_NAME>`. prior to [15 July 2026][immutable-sub] will omit the `@<ORG_ID>` and
Adjust the trust policy accordingly if you are using environment-based `@<REPO_ID>` suffixes unless opted in. Workflows running in GitHub
workflows. environments will include an`environment:<ENVIRONMENT_NAME>` stanza. See
[Claims and scoping permissions](#claims-and-scoping-permissions) for more
information.
[immutable-sub]:
https://github.blog/changelog/2026-04-23-immutable-subject-claims-for-github-actions-oidc-tokens/
3. Attach permissions to the IAM Role that allow it to access the AWS resources 3. Attach permissions to the IAM Role that allow it to access the AWS resources
you need. you need.
@@ -56,7 +61,7 @@ Authenticate to AWS in GitHub Actions (and others)! Works especially well with
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Configure AWS Credentials - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
role-to-assume: <Role ARN you created in step 2> role-to-assume: <Role ARN you created in step 2>
aws-region: <AWS Region you want to use> aws-region: <AWS Region you want to use>
@@ -245,7 +250,7 @@ specify the profile name as an environment variable in the job step:
```yaml ```yaml
- name: Configure AWS Credentials - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-1 aws-region: us-east-1
role-to-assume: arn:aws:iam::123456789100:role/my-role role-to-assume: arn:aws:iam::123456789100:role/my-role
@@ -263,14 +268,14 @@ step environment variables:
```yaml ```yaml
- name: Configure AWS credentials - name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-1 aws-region: us-east-1
role-to-assume: arn:aws:iam::123456789100:role/my-first-role role-to-assume: arn:aws:iam::123456789100:role/my-first-role
aws-profile: firstRoleInChain aws-profile: firstRoleInChain
- name: assume second role - name: assume second role
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
role-to-assume: arn:aws:iam::987654321000:role/my-second-role role-to-assume: arn:aws:iam::987654321000:role/my-second-role
@@ -306,7 +311,7 @@ this action will always consider the `HTTP_PROXY` environment variable.
Manually configured proxy: Manually configured proxy:
```yaml ```yaml
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
role-to-assume: my-github-actions-role role-to-assume: my-github-actions-role
@@ -453,7 +458,7 @@ line.
<summary>Inline session policy examples</summary> <summary>Inline session policy examples</summary>
```yaml ```yaml
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
inline-session-policy: '{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:List*","Resource":"*"}]}' inline-session-policy: '{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:List*","Resource":"*"}]}'
``` ```
@@ -461,7 +466,7 @@ with:
Or we can have a nicely formatted JSON as well: Or we can have a nicely formatted JSON as well:
```yaml ```yaml
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
inline-session-policy: >- inline-session-policy: >-
{ {
@@ -489,7 +494,7 @@ the role.
<summary>Managed session policy examples</summary> <summary>Managed session policy examples</summary>
```yaml ```yaml
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
managed-session-policies: arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess managed-session-policies: arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
``` ```
@@ -497,7 +502,7 @@ with:
And we can pass multiple managed policies likes this: And we can pass multiple managed policies likes this:
```yaml ```yaml
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
managed-session-policies: | managed-session-policies: |
arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
@@ -543,7 +548,7 @@ specify the audience through the `audience` input:
```yaml ```yaml
- name: Configure AWS Credentials for China region audience - name: Configure AWS Credentials for China region audience
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
audience: sts.amazonaws.com.cn audience: sts.amazonaws.com.cn
aws-region: cn-northwest-1 aws-region: cn-northwest-1
@@ -593,6 +598,30 @@ claims ([1][gh-blog-oidc], [2][sub-claim-custom]).
> unintended access. Instead, use `StringEquals` or `StringLike` operators to > unintended access. Instead, use `StringEquals` or `StringLike` operators to
> check for specific claim values. > check for specific claim values.
#### Immutable subject claims
Repositories created on github.com on or after 15 July 2026, older
repositories that have opted in, and older repositories that have been renamed
since 15 July 2026, emit an [immutable `sub` claim][immutable-sub].
This claim appends the permanent numeric ID of the organization and of the
repository after each name, separated by `@`, so that a recycled org or
repository name cannot be used to mint tokens matching a stale trust policy.
For example:
```text
# Legacy (mutable) sub claim
repo:octo-org/octo-repo:ref:refs/heads/main
# Immutable sub claim
repo:octo-org@123456/octo-repo@789012:ref:refs/heads/main
```
If your trust policy matches the legacy name-only form and your repository emits
the immutable claim, `AssumeRoleWithWebIdentity` fails with `Not authorized to
perform sts:AssumeRoleWithWebIdentity`. To fix this, update the `sub` condition
to the immutable form. You can find your repository's prefix in the Settings,
or by following the token inspection steps below.
[least-privilege]: [least-privilege]:
https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege
[gh-blog-oidc]: [gh-blog-oidc]:
@@ -605,7 +634,7 @@ claims ([1][gh-blog-oidc], [2][sub-claim-custom]).
If you aren't sure what claim values your workflow is producing, the If you aren't sure what claim values your workflow is producing, the
[`actions-oidc-debugger`](https://github.com/github/actions-oidc-debugger) [`actions-oidc-debugger`](https://github.com/github/actions-oidc-debugger)
action will print the decoded JWT payload. Run it in a private repository action will print the decoded JWT payload. Run it in a private repository
only the token itself is short-lived but the claim values may be sensitive. only; the token itself is short-lived but the claim values may be sensitive.
See the GitHub [security-hardening guide][gh-oidc-hardening] for further See the GitHub [security-hardening guide][gh-oidc-hardening] for further
discussion of trust conditions and threat modeling. discussion of trust conditions and threat modeling.
@@ -680,7 +709,7 @@ Provider. The audience would still be `sts.amazonaws.com` by default.
```yaml ```yaml
- name: Configure AWS Credentials - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role
@@ -696,13 +725,13 @@ environment variable and use it to assume the role
```yaml ```yaml
- name: Configure AWS Credentials - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role
role-session-name: MySessionName role-session-name: MySessionName
- name: Configure other AWS Credentials - name: Configure other AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
role-to-assume: arn:aws:iam::987654321000:role/my-second-role role-to-assume: arn:aws:iam::987654321000:role/my-second-role
@@ -724,7 +753,7 @@ alternatively, the `TagSession` permission can be omitted if you are using the
```yaml ```yaml
- name: Configure AWS Credentials - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
@@ -745,7 +774,7 @@ like `role-to-assume: my-github-actions-role`.
```yaml ```yaml
- name: Configure AWS Credentials 1 - name: Configure AWS Credentials 1
id: creds id: creds
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role
@@ -754,7 +783,7 @@ like `role-to-assume: my-github-actions-role`.
run: | run: |
aws sts get-caller-identity aws sts get-caller-identity
- name: Configure AWS Credentials 2 - name: Configure AWS Credentials 2
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-2 aws-region: us-east-2
aws-access-key-id: ${{ steps.creds.outputs.aws-access-key-id }} aws-access-key-id: ${{ steps.creds.outputs.aws-access-key-id }}
@@ -776,20 +805,23 @@ the environment (for example, on a self-hosted runner where you do not want the
assumed-role credentials to shadow an existing EC2 instance profile), pair assumed-role credentials to shadow an existing EC2 instance profile), pair
`output-credentials: true` with `output-env-credentials: false`. In that mode, `output-credentials: true` with `output-env-credentials: false`. In that mode,
the action does not run its post-credential SDK-pickup validation step, since the action does not run its post-credential SDK-pickup validation step, since
the credentials were never written to the environment. the credentials were never written to the environment. The action still
validates the resolved credentials by calling `sts:GetCallerIdentity` with the
explicit credentials, so the `allowed-account-ids` check can be enforced if
provided.
### Configure multiple AWS profiles in a single workflow ### Configure multiple AWS profiles in a single workflow
```yaml ```yaml
- name: Configure AWS Credentials for Dev - name: Configure AWS Credentials for Dev
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-east-1 aws-region: us-east-1
role-to-assume: arn:aws:iam::111111111111:role/dev-role role-to-assume: arn:aws:iam::111111111111:role/dev-role
aws-profile: dev aws-profile: dev
- name: Configure AWS Credentials for Prod - name: Configure AWS Credentials for Prod
uses: aws-actions/configure-aws-credentials@v6.1.0 uses: aws-actions/configure-aws-credentials@v6.2.3
with: with:
aws-region: us-west-2 aws-region: us-west-2
role-to-assume: arn:aws:iam::222222222222:role/prod-role role-to-assume: arn:aws:iam::222222222222:role/prod-role
+31 -788
View File
@@ -3,7 +3,7 @@ https://www.npmjs.com/package/generate-license-file
The following npm package may be included in this product: The following npm package may be included in this product:
- @aws/lambda-invoke-store@0.2.4 - @aws/lambda-invoke-store@0.3.0
This package contains the following license: This package contains the following license:
@@ -184,217 +184,6 @@ Apache License
----------- -----------
The following npm packages may be included in this product:
- @aws-crypto/sha256-browser@5.2.0
- @aws-crypto/supports-web-crypto@5.2.0
These packages each contain the following license:
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-----------
The following npm package may be included in this product: The following npm package may be included in this product:
- source-map@0.6.1 - source-map@0.6.1
@@ -431,220 +220,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------- -----------
The following npm packages may be included in this product:
- @aws-crypto/crc32@5.2.0
- @aws-crypto/util@5.2.0
These packages each contain the following license:
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-----------
The following npm package may be included in this product: The following npm package may be included in this product:
- @aws-sdk/client-sts@3.1049.0 - @aws-sdk/client-sts@3.1116.0
This package contains the following license: This package contains the following license:
@@ -854,9 +432,9 @@ Apache License
The following npm packages may be included in this product: The following npm packages may be included in this product:
- @aws-sdk/signature-v4-multi-region@3.996.27 - @aws-sdk/signature-v4-multi-region@3.996.46
- @smithy/core@3.24.5 - @smithy/core@3.33.3
- @smithy/types@4.14.2 - @smithy/types@4.17.2
These packages each contain the following license: These packages each contain the following license:
@@ -1068,10 +646,10 @@ The following npm packages may be included in this product:
- agent-base@9.0.0 - agent-base@9.0.0
- degenerator@7.0.1 - degenerator@7.0.1
- https-proxy-agent@9.0.0 - https-proxy-agent@9.1.0
- pac-resolver@9.0.1 - pac-resolver@9.0.1
- proxy-agent@8.0.1 - proxy-agent@8.0.2
- socks-proxy-agent@10.0.0 - socks-proxy-agent@10.1.0
These packages each contain the following license: These packages each contain the following license:
@@ -1102,7 +680,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The following npm package may be included in this product: The following npm package may be included in this product:
- http-proxy-agent@9.0.0 - http-proxy-agent@9.1.0
This package contains the following license: This package contains the following license:
@@ -1134,7 +712,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The following npm packages may be included in this product: The following npm packages may be included in this product:
- data-uri-to-buffer@8.0.0 - data-uri-to-buffer@8.0.0
- get-uri@8.0.0 - get-uri@8.0.1
These packages each contain the following license: These packages each contain the following license:
@@ -1165,7 +743,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The following npm package may be included in this product: The following npm package may be included in this product:
- pac-proxy-agent@9.0.1 - pac-proxy-agent@9.1.0
This package contains the following license: This package contains the following license:
@@ -1254,7 +832,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The following npm package may be included in this product: The following npm package may be included in this product:
- @aws-sdk/core@3.974.15 - @aws-sdk/core@3.977.9
This package contains the following license: This package contains the following license:
@@ -1462,232 +1040,18 @@ Apache License
----------- -----------
The following npm package may be included in this product:
- @aws-crypto/sha256-js@5.2.0
This package contains the following license:
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-----------
The following npm packages may be included in this product: The following npm packages may be included in this product:
- @aws-sdk/credential-provider-env@3.972.41 - @aws-sdk/credential-provider-env@3.972.70
- @aws-sdk/credential-provider-ini@3.972.42 - @aws-sdk/credential-provider-ini@3.973.15
- @aws-sdk/credential-provider-node@3.972.43 - @aws-sdk/credential-provider-node@3.972.81
- @aws-sdk/token-providers@3.1049.0 - @aws-sdk/token-providers@3.1116.0
- @aws-sdk/types@3.973.9 - @aws-sdk/types@3.974.5
- @aws-sdk/util-locate-window@3.965.5 - @aws-sdk/xml-builder@3.972.40
- @aws-sdk/xml-builder@3.972.26 - @smithy/credential-provider-imds@4.5.2
- @smithy/credential-provider-imds@4.3.3 - @smithy/fetch-http-handler@5.7.2
- @smithy/fetch-http-handler@5.4.3 - @smithy/node-http-handler@4.11.3
- @smithy/is-array-buffer@2.2.0 - @smithy/signature-v4@5.6.12
- @smithy/node-http-handler@4.7.3
- @smithy/signature-v4@5.4.5
- @smithy/util-buffer-from@2.2.0
- @smithy/util-utf8@2.3.0
These packages each contain the following license: These packages each contain the following license:
@@ -1897,9 +1261,9 @@ Apache License
The following npm packages may be included in this product: The following npm packages may be included in this product:
- @aws-sdk/credential-provider-process@3.972.38 - @aws-sdk/credential-provider-process@3.972.70
- @aws-sdk/credential-provider-sso@3.972.42 - @aws-sdk/credential-provider-sso@3.973.14
- @aws-sdk/credential-provider-web-identity@3.972.42 - @aws-sdk/credential-provider-web-identity@3.972.76
These packages each contain the following license: These packages each contain the following license:
@@ -2109,9 +1473,9 @@ Apache License
The following npm packages may be included in this product: The following npm packages may be included in this product:
- @aws-sdk/credential-provider-http@3.972.40 - @aws-sdk/credential-provider-http@3.972.72
- @aws-sdk/credential-provider-login@3.972.42 - @aws-sdk/credential-provider-login@3.972.77
- @aws-sdk/nested-clients@3.997.10 - @aws-sdk/nested-clients@3.997.44
These packages each contain the following license: These packages each contain the following license:
@@ -2121,7 +1485,7 @@ Apache-2.0
The following npm package may be included in this product: The following npm package may be included in this product:
- ip-address@10.2.0 - ip-address@10.4.0
This package contains the following license: This package contains the following license:
@@ -2335,9 +1699,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The following npm packages may be included in this product: The following npm packages may be included in this product:
- @nodable/entities@2.1.1 - proxy-agent-negotiate@1.1.0
- quickjs-wasi@2.2.0 - quickjs-wasi@2.2.0
- xml-naming@0.1.0
These packages each contain the following license: These packages each contain the following license:
@@ -2377,127 +1740,7 @@ SOFTWARE.
The following npm package may be included in this product: The following npm package may be included in this product:
- fast-xml-parser@5.7.3 - undici@6.28.0
This package contains the following license:
MIT License
Copyright (c) 2017 Amit Kumar Gupta
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-----------
The following npm package may be included in this product:
- strnum@2.3.0
This package contains the following license:
MIT License
Copyright (c) 2021 Natural Intelligence
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-----------
The following npm package may be included in this product:
- path-expression-matcher@1.5.0
This package contains the following license:
MIT License
Copyright (c) 2024
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-----------
The following npm package may be included in this product:
- fast-xml-builder@1.2.0
This package contains the following license:
MIT License
Copyright (c) 2026 Natural Intelligence
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-----------
The following npm package may be included in this product:
- undici@6.25.0
This package contains the following license: This package contains the following license:
Generated Vendored
+241 -42
View File
@@ -6,7 +6,11 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf; var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty; var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() { var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; try {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
} catch (e) {
throw mod = 0, e;
}
}; };
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
@@ -1925,7 +1929,11 @@ var require_request = __commonJS({
} else if (typeof val[i] === "object") { } else if (typeof val[i] === "object") {
throw new InvalidArgumentError(`invalid ${key} header`); throw new InvalidArgumentError(`invalid ${key} header`);
} else { } else {
arr.push(`${val[i]}`); const str = `${val[i]}`;
if (!isValidHeaderValue(str)) {
throw new InvalidArgumentError(`invalid ${key} header`);
}
arr.push(str);
} }
} }
val = arr; val = arr;
@@ -1937,6 +1945,9 @@ var require_request = __commonJS({
val = ""; val = "";
} else { } else {
val = `${val}`; val = `${val}`;
if (!isValidHeaderValue(val)) {
throw new InvalidArgumentError(`invalid ${key} header`);
}
} }
if (headerName === "host") { if (headerName === "host") {
if (request.host !== null) { if (request.host !== null) {
@@ -2058,6 +2069,7 @@ var require_dispatcher_base = __commonJS({
} }
get webSocketOptions() { get webSocketOptions() {
return { return {
maxFragments: this[kWebSocketOptions].maxFragments ?? 131072,
maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024
}; };
} }
@@ -5666,6 +5678,7 @@ var require_client_h1 = __commonJS({
RequestContentLengthMismatchError, RequestContentLengthMismatchError,
ResponseContentLengthMismatchError, ResponseContentLengthMismatchError,
RequestAbortedError, RequestAbortedError,
InvalidArgumentError,
HeadersTimeoutError, HeadersTimeoutError,
HeadersOverflowError, HeadersOverflowError,
SocketError, SocketError,
@@ -5712,6 +5725,9 @@ var require_client_h1 = __commonJS({
var FastBuffer = Buffer[Symbol.species]; var FastBuffer = Buffer[Symbol.species];
var addListener = util.addListener; var addListener = util.addListener;
var removeAllListeners = util.removeAllListeners; var removeAllListeners = util.removeAllListeners;
var kIdleSocketValidation = /* @__PURE__ */ Symbol("kIdleSocketValidation");
var kIdleSocketValidationTimeout = /* @__PURE__ */ Symbol("kIdleSocketValidationTimeout");
var kSocketUsed = /* @__PURE__ */ Symbol("kSocketUsed");
var extractBody; var extractBody;
async function lazyllhttp() { async function lazyllhttp() {
const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
@@ -5874,24 +5890,55 @@ var require_client_h1 = __commonJS({
currentBufferRef = null; currentBufferRef = null;
} }
const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
if (ret === constants4.ERROR.PAUSED_UPGRADE) { if (ret !== constants4.ERROR.OK) {
this.onUpgrade(data.slice(offset)); const body = data.subarray(offset);
} else if (ret === constants4.ERROR.PAUSED) { if (ret === constants4.ERROR.PAUSED_UPGRADE) {
this.paused = true; this.onUpgrade(body);
socket.unshift(data.slice(offset)); } else if (ret === constants4.ERROR.PAUSED) {
} else if (ret !== constants4.ERROR.OK) { this.paused = true;
const ptr = llhttp.llhttp_get_error_reason(this.ptr); socket.unshift(body);
let message = ""; } else {
if (ptr) { throw this.createError(ret, body);
const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
} }
throw new HTTPParserError(message, constants4.ERROR[ret], data.slice(offset));
} }
} catch (err) { } catch (err) {
util.destroy(socket, err); util.destroy(socket, err);
} }
} }
finish() {
assert(currentParser === null);
assert(this.ptr != null);
assert(!this.paused);
const { llhttp } = this;
let ret;
try {
currentParser = this;
ret = llhttp.llhttp_finish(this.ptr);
} finally {
currentParser = null;
}
if (ret === constants4.ERROR.OK) {
return null;
}
if (ret === constants4.ERROR.PAUSED || ret === constants4.ERROR.PAUSED_UPGRADE) {
this.paused = true;
return null;
}
return this.createError(ret, EMPTY_BUF);
}
createError(ret, data) {
const { llhttp, contentLength, bytesRead } = this;
if (contentLength && bytesRead !== parseInt(contentLength, 10)) {
return new ResponseContentLengthMismatchError();
}
const ptr = llhttp.llhttp_get_error_reason(this.ptr);
let message = "";
if (ptr) {
const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
}
return new HTTPParserError(message, constants4.ERROR[ret], data);
}
destroy() { destroy() {
assert(this.ptr != null); assert(this.ptr != null);
assert(currentParser == null); assert(currentParser == null);
@@ -5911,6 +5958,10 @@ var require_client_h1 = __commonJS({
if (socket.destroyed) { if (socket.destroyed) {
return -1; return -1;
} }
if (client[kRunning] === 0) {
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
return -1;
}
const request = client[kQueue][client[kRunningIdx]]; const request = client[kQueue][client[kRunningIdx]];
if (!request) { if (!request) {
return -1; return -1;
@@ -5990,6 +6041,10 @@ var require_client_h1 = __commonJS({
if (socket.destroyed) { if (socket.destroyed) {
return -1; return -1;
} }
if (client[kRunning] === 0) {
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
return -1;
}
const request = client[kQueue][client[kRunningIdx]]; const request = client[kQueue][client[kRunningIdx]];
if (!request) { if (!request) {
return -1; return -1;
@@ -6115,6 +6170,7 @@ var require_client_h1 = __commonJS({
} }
request.onComplete(headers); request.onComplete(headers);
client[kQueue][client[kRunningIdx]++] = null; client[kQueue][client[kRunningIdx]++] = null;
socket[kSocketUsed] = true;
if (socket[kWriting]) { if (socket[kWriting]) {
assert(client[kRunning] === 0); assert(client[kRunning] === 0);
util.destroy(socket, new InformationalError("reset")); util.destroy(socket, new InformationalError("reset"));
@@ -6158,12 +6214,19 @@ var require_client_h1 = __commonJS({
socket[kWriting] = false; socket[kWriting] = false;
socket[kReset] = false; socket[kReset] = false;
socket[kBlocking] = false; socket[kBlocking] = false;
socket[kIdleSocketValidation] = 0;
socket[kIdleSocketValidationTimeout] = null;
socket[kSocketUsed] = false;
socket[kParser] = new Parser(client, socket, llhttpInstance); socket[kParser] = new Parser(client, socket, llhttpInstance);
addListener(socket, "error", function(err) { addListener(socket, "error", function(err) {
assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
const parser = this[kParser]; const parser = this[kParser];
if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
parser.onMessageComplete(); const parserErr = parser.finish();
if (parserErr) {
this[kError] = parserErr;
this[kClient][kOnError](parserErr);
}
return; return;
} }
this[kError] = err; this[kError] = err;
@@ -6178,7 +6241,10 @@ var require_client_h1 = __commonJS({
addListener(socket, "end", function() { addListener(socket, "end", function() {
const parser = this[kParser]; const parser = this[kParser];
if (parser.statusCode && !parser.shouldKeepAlive) { if (parser.statusCode && !parser.shouldKeepAlive) {
parser.onMessageComplete(); const parserErr = parser.finish();
if (parserErr) {
util.destroy(this, parserErr);
}
return; return;
} }
util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
@@ -6186,9 +6252,10 @@ var require_client_h1 = __commonJS({
addListener(socket, "close", function() { addListener(socket, "close", function() {
const client2 = this[kClient]; const client2 = this[kClient];
const parser = this[kParser]; const parser = this[kParser];
clearIdleSocketValidation(this);
if (parser) { if (parser) {
if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
parser.onMessageComplete(); this[kError] = parser.finish() || this[kError];
} }
this[kParser].destroy(); this[kParser].destroy();
this[kParser] = null; this[kParser] = null;
@@ -6237,7 +6304,7 @@ var require_client_h1 = __commonJS({
return socket.destroyed; return socket.destroyed;
}, },
busy(request) { busy(request) {
if (socket[kWriting] || socket[kReset] || socket[kBlocking]) { if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
return true; return true;
} }
if (request) { if (request) {
@@ -6255,6 +6322,24 @@ var require_client_h1 = __commonJS({
} }
}; };
} }
function clearIdleSocketValidation(socket) {
if (socket[kIdleSocketValidationTimeout]) {
clearTimeout(socket[kIdleSocketValidationTimeout]);
socket[kIdleSocketValidationTimeout] = null;
}
socket[kIdleSocketValidation] = 0;
}
function scheduleIdleSocketValidation(client, socket) {
socket[kIdleSocketValidation] = 1;
socket[kIdleSocketValidationTimeout] = setTimeout(() => {
socket[kIdleSocketValidationTimeout] = null;
socket[kIdleSocketValidation] = 2;
if (client[kSocket] === socket && !socket.destroyed) {
client[kResume]();
}
}, 0);
socket[kIdleSocketValidationTimeout].unref?.();
}
function resumeH1(client) { function resumeH1(client) {
const socket = client[kSocket]; const socket = client[kSocket];
if (socket && !socket.destroyed) { if (socket && !socket.destroyed) {
@@ -6267,6 +6352,29 @@ var require_client_h1 = __commonJS({
socket.ref(); socket.ref();
socket[kNoRef] = false; socket[kNoRef] = false;
} }
if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {
if (socket[kIdleSocketValidation] === 0) {
scheduleIdleSocketValidation(client, socket);
socket[kParser].readMore();
if (socket.destroyed) {
return;
}
return;
}
if (socket[kIdleSocketValidation] === 1) {
socket[kParser].readMore();
if (socket.destroyed) {
return;
}
return;
}
}
if (client[kRunning] === 0) {
socket[kParser].readMore();
if (socket.destroyed) {
return;
}
}
if (client[kSize] === 0) { if (client[kSize] === 0) {
if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE);
@@ -6297,8 +6405,16 @@ var require_client_h1 = __commonJS({
} }
body = bodyStream.stream; body = bodyStream.stream;
contentLength = bodyStream.length; contentLength = bodyStream.length;
} else if (util.isBlobLike(body) && request.contentType == null && body.type) { } else if (util.isBlobLike(body) && request.contentType == null) {
headers.push("content-type", body.type); const contentType = body.type;
if (contentType) {
const contentTypeValue = `${contentType}`;
if (!util.isValidHeaderValue(contentTypeValue)) {
util.errorRequest(client, request, new InvalidArgumentError("invalid content-type header"));
return false;
}
headers.push("content-type", contentTypeValue);
}
} }
if (body && typeof body.read === "function") { if (body && typeof body.read === "function") {
body.read(0); body.read(0);
@@ -6319,6 +6435,7 @@ var require_client_h1 = __commonJS({
process.emitWarning(new RequestContentLengthMismatchError()); process.emitWarning(new RequestContentLengthMismatchError());
} }
const socket = client[kSocket]; const socket = client[kSocket];
clearIdleSocketValidation(socket);
const abort = (err) => { const abort = (err) => {
if (request.aborted || request.completed) { if (request.aborted || request.completed) {
return; return;
@@ -8849,6 +8966,24 @@ var require_retry_handler = __commonJS({
const current = Date.now(); const current = Date.now();
return new Date(retryAfter).getTime() - current; return new Date(retryAfter).getTime() - current;
} }
function validatePartialResponseContentLength(headers, range, statusCode, retryCount) {
const contentLength = headers["content-length"];
if (contentLength == null) {
return null;
}
if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) {
return null;
}
const length = Number(contentLength);
const expectedLength = range.end - range.start + 1;
if (!Number.isFinite(length) || length !== expectedLength) {
return new RequestRetryError("Content-Length mismatch", statusCode, {
headers,
data: { count: retryCount }
});
}
return null;
}
var RetryHandler = class _RetryHandler { var RetryHandler = class _RetryHandler {
constructor(opts, handlers) { constructor(opts, handlers) {
const { retryOptions, ...dispatchOpts } = opts; const { retryOptions, ...dispatchOpts } = opts;
@@ -9021,6 +9156,11 @@ var require_retry_handler = __commonJS({
); );
return false; return false;
} }
const contentLengthError = validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount);
if (contentLengthError != null) {
this.abort(contentLengthError);
return false;
}
const { start, size, end = size - 1 } = contentRange; const { start, size, end = size - 1 } = contentRange;
assert(this.start === start, "content-range mismatch"); assert(this.start === start, "content-range mismatch");
assert(this.end == null || this.end === end, "content-range mismatch"); assert(this.end == null || this.end === end, "content-range mismatch");
@@ -9038,6 +9178,11 @@ var require_retry_handler = __commonJS({
statusMessage statusMessage
); );
} }
const contentLengthError = validatePartialResponseContentLength(headers, range, statusCode, this.retryCount);
if (contentLengthError != null) {
this.abort(contentLengthError);
return false;
}
const { start, size, end = size - 1 } = range; const { start, size, end = size - 1 } = range;
assert( assert(
start != null && Number.isFinite(start), start != null && Number.isFinite(start),
@@ -15883,14 +16028,48 @@ var require_util6 = __commonJS({
for (let i = 0; i < path.length; ++i) { for (let i = 0; i < path.length; ++i) {
const code = path.charCodeAt(i); const code = path.charCodeAt(i);
if (code < 32 || // exclude CTLs (0-31) if (code < 32 || // exclude CTLs (0-31)
code === 127 || // DEL code > 126 || // exclude DEL and non-ascii
code === 59) { code === 59) {
throw new Error("Invalid cookie path"); throw new Error("Invalid cookie path");
} }
} }
} }
function isLetterOrDigit(code) {
return code >= 48 && code <= 57 || // 0-9
code >= 65 && code <= 90 || // A-Z
code >= 97 && code <= 122;
}
function validateCookieDomain(domain) { function validateCookieDomain(domain) {
if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) { if (domain === " ") {
return;
}
if (domain.length > 255) {
throw new Error("Invalid cookie domain");
}
let labelLength = 0;
for (let i = 0; i < domain.length; ++i) {
const code = domain.charCodeAt(i);
if (code === 46) {
if (labelLength === 0) {
throw new Error("Invalid cookie domain");
}
if (domain.charCodeAt(i - 1) === 45) {
throw new Error("Invalid cookie domain");
}
labelLength = 0;
continue;
}
if (labelLength === 0 && !isLetterOrDigit(code)) {
throw new Error("Invalid cookie domain");
}
if (!isLetterOrDigit(code) && code !== 45) {
throw new Error("Invalid cookie domain");
}
if (++labelLength > 63) {
throw new Error("Invalid cookie domain");
}
}
if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 45) {
throw new Error("Invalid cookie domain"); throw new Error("Invalid cookie domain");
} }
} }
@@ -15973,7 +16152,11 @@ var require_util6 = __commonJS({
throw new Error("Invalid unparsed"); throw new Error("Invalid unparsed");
} }
const [key, ...value] = part.split("="); const [key, ...value] = part.split("=");
out.push(`${key.trim()}=${value.join("=")}`); const trimmedKey = key.trim();
const joinedValue = value.join("=");
validateCookieName(trimmedKey);
validateCookieValue(joinedValue);
out.push(`${trimmedKey}=${joinedValue}`);
} }
return out.join("; "); return out.join("; ");
} }
@@ -16103,18 +16286,14 @@ var require_parse = __commonJS({
} else if (attributeNameLowercase === "httponly") { } else if (attributeNameLowercase === "httponly") {
cookieAttributeList.httpOnly = true; cookieAttributeList.httpOnly = true;
} else if (attributeNameLowercase === "samesite") { } else if (attributeNameLowercase === "samesite") {
let enforcement = "Default";
const attributeValueLowercase = attributeValue.toLowerCase(); const attributeValueLowercase = attributeValue.toLowerCase();
if (attributeValueLowercase.includes("none")) { if (attributeValueLowercase === "none") {
enforcement = "None"; cookieAttributeList.sameSite = "None";
} else if (attributeValueLowercase === "strict") {
cookieAttributeList.sameSite = "Strict";
} else if (attributeValueLowercase === "lax") {
cookieAttributeList.sameSite = "Lax";
} }
if (attributeValueLowercase.includes("strict")) {
enforcement = "Strict";
}
if (attributeValueLowercase.includes("lax")) {
enforcement = "Lax";
}
cookieAttributeList.sameSite = enforcement;
} else { } else {
cookieAttributeList.unparsed ??= []; cookieAttributeList.unparsed ??= [];
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
@@ -17136,6 +17315,10 @@ var require_receiver = __commonJS({
var { closeWebSocketConnection } = require_connection(); var { closeWebSocketConnection } = require_connection();
var { PerMessageDeflate } = require_permessage_deflate(); var { PerMessageDeflate } = require_permessage_deflate();
var { MessageSizeExceededError } = require_errors(); var { MessageSizeExceededError } = require_errors();
function failWebsocketConnectionWithCode(ws, code, reason) {
closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason));
failWebsocketConnection(ws, reason);
}
var ByteParser = class extends Writable { var ByteParser = class extends Writable {
#buffers = []; #buffers = [];
#fragmentsBytes = 0; #fragmentsBytes = 0;
@@ -17147,16 +17330,19 @@ var require_receiver = __commonJS({
/** @type {Map<string, PerMessageDeflate>} */ /** @type {Map<string, PerMessageDeflate>} */
#extensions; #extensions;
/** @type {number} */ /** @type {number} */
#maxFragments;
/** @type {number} */
#maxPayloadSize; #maxPayloadSize;
/** /**
* @param {import('./websocket').WebSocket} ws * @param {import('./websocket').WebSocket} ws
* @param {Map<string, string>|null} extensions * @param {Map<string, string>|null} extensions
* @param {{ maxPayloadSize?: number }} [options] * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options]
*/ */
constructor(ws, extensions, options = {}) { constructor(ws, extensions, options = {}) {
super(); super();
this.ws = ws; this.ws = ws;
this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions; this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions;
this.#maxFragments = options.maxFragments ?? 0;
this.#maxPayloadSize = options.maxPayloadSize ?? 0; this.#maxPayloadSize = options.maxPayloadSize ?? 0;
if (this.#extensions.has("permessage-deflate")) { if (this.#extensions.has("permessage-deflate")) {
this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options)); this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options));
@@ -17173,8 +17359,8 @@ var require_receiver = __commonJS({
this.run(callback); this.run(callback);
} }
#validatePayloadLength() { #validatePayloadLength() {
if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength > this.#maxPayloadSize) { if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize) {
failWebsocketConnection(this.ws, "Payload size exceeds maximum allowed size"); failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size");
return false; return false;
} }
return true; return true;
@@ -17290,9 +17476,11 @@ var require_receiver = __commonJS({
this.#state = parserStates.INFO; this.#state = parserStates.INFO;
} else { } else {
if (!this.#info.compressed) { if (!this.#info.compressed) {
this.writeFragments(body); if (!this.writeFragments(body)) {
return;
}
if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
failWebsocketConnection(this.ws, new MessageSizeExceededError().message); failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message);
return; return;
} }
if (!this.#info.fragmented && this.#info.fin) { if (!this.#info.fragmented && this.#info.fin) {
@@ -17305,12 +17493,15 @@ var require_receiver = __commonJS({
this.#info.fin, this.#info.fin,
(error2, data) => { (error2, data) => {
if (error2) { if (error2) {
failWebsocketConnection(this.ws, error2.message); const code = error2 instanceof MessageSizeExceededError ? 1009 : 1007;
failWebsocketConnectionWithCode(this.ws, code, error2.message);
return;
}
if (!this.writeFragments(data)) {
return; return;
} }
this.writeFragments(data);
if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
failWebsocketConnection(this.ws, new MessageSizeExceededError().message); failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message);
return; return;
} }
if (!this.#info.fin) { if (!this.#info.fin) {
@@ -17368,8 +17559,13 @@ var require_receiver = __commonJS({
return buffer; return buffer;
} }
writeFragments(fragment) { writeFragments(fragment) {
if (this.#maxFragments > 0 && this.#fragments.length === this.#maxFragments) {
failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments");
return false;
}
this.#fragmentsBytes += fragment.length; this.#fragmentsBytes += fragment.length;
this.#fragments.push(fragment); this.#fragments.push(fragment);
return true;
} }
consumeFragments() { consumeFragments() {
const fragments = this.#fragments; const fragments = this.#fragments;
@@ -17819,8 +18015,11 @@ var require_websocket = __commonJS({
*/ */
#onConnectionEstablished(response, parsedExtensions) { #onConnectionEstablished(response, parsedExtensions) {
this[kResponse] = response; this[kResponse] = response;
const maxPayloadSize = this[kController]?.dispatcher?.webSocketOptions?.maxPayloadSize; const webSocketOptions = this[kController]?.dispatcher?.webSocketOptions;
const maxFragments = webSocketOptions?.maxFragments;
const maxPayloadSize = webSocketOptions?.maxPayloadSize;
const parser = new ByteParser(this, parsedExtensions, { const parser = new ByteParser(this, parsedExtensions, {
maxFragments,
maxPayloadSize maxPayloadSize
}); });
parser.on("drain", onParserDrain); parser.on("drain", onParserDrain);
Generated Vendored
+9783 -8826
View File
File diff suppressed because one or more lines are too long
-14
View File
@@ -1,14 +0,0 @@
# Examples
## [federated-setup](./federated-setup/README.md)
The directory contains templates for setting up the `configure-aws-credentials`
federation between your GitHub Organization/repository and your AWS account.
## [cfn-deploy-example](./cfn-deploy-example/README.md)
Repository example uses aws-action `configure-aws-credentials` with OIDC
federation template
[github-actions-oidc-federation-and-role](./github-actions-oidc-federation-and-role.yml).
Example demonstrates a repository that deploys AWS CloudFormation template using
cfn-deploy GitHub Action.
@@ -1,15 +0,0 @@
name: 'compliance'
## run ci testing on all push events
on: [push]
jobs:
## Guard rule set
sast-guard:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: grolston/guard-action@main
with:
data_directory: './cloudformation/' ## change to your template directory
rule_set: 'FedRAMP-Moderate'
show_summary: 'all'
output_format: 'single-line-summary'
@@ -1,38 +0,0 @@
---
name: deploy
on:
push:
branches:
- main
env:
AWS_DEFAULT_REGION: us-east-1
AWS_DEFAULT_OUTPUT: json
jobs:
deploy-cfn:
name: deploy
runs-on: ubuntu-latest
# These permissions are needed to interact with GitHubs OIDC Token endpoint.
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6
with:
aws-region: us-east-1
## the following creates an ARN based on the values entered into github secrets
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: myGitHubActions
- name: Deploy EC2 Bastion
uses: aws-actions/aws-cloudformation-github-deploy@v1.3.0
with:
name: myEC2bastion
## change to path to template in your github repo
template: cloudformation/ec2-bastion.yml
capabilities: CAPABILITY_IAM, CAPABILITY_NAMED_IAM
no-fail-on-empty-changeset: "1"
## parameter set in github secrets
parameter-overrides: "pVpc=${{ secrets.VPC_ID }},pSubnet=${{ secrets.SUBNET_ID }}"
-24
View File
@@ -1,24 +0,0 @@
# cfn-deploy example
Example uses aws-action `configure-aws-credentials` with OIDC federation. Prior
to using this example project, the user needs to deploy the
[github-actions-oidc-federation-and-role](../federated-setup/github-actions-oidc-federation-and-role.yml)
template in the AWS account they want to deploy the CloudFormation template
into. Specify the GitHub Organization name, repository name, and the specific
branch you want to deploy on.
Within the [github/workflows](./.github/workflows/) directory there is a
[compliance.yml](./.github/workflows/compliance.yml) and a
[deploy.yml](./.github/workflows/deploy.yml). The deploy.yml file leverages the
aws-action `configure-aws-credentials` and accesses GitHub Action Secrets for
some of the variables. The compliance.yml runs static application security
testing using cfn-guard.
To use the example you will need to set the following GitHub Action Secrets:
| Secret Key | Used With | Description |
| --------------- | -------------------------------- | ---------------------------------------- |
| AWS_ACCOUNT_ID | configure-aws-credentials | The AWS account ID |
| AWS_DEPLOY_ROLE | configure-aws-credentials | The name of the IAM role |
| VPC_ID | aws-cloudformation-github-deploy | VPC ID the EC2 Bastion is deployed to |
| SUBNET_ID | aws-cloudformation-github-deploy | Subnet ID the EC2 Bastion is deployed to |
-150
View File
@@ -1,150 +0,0 @@
---
AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 bastion for latest AWS Linux 2 EC2 deployment
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: "EC2 Configuration"
Parameters:
- pTagNameValue
- pOperatingSystem
- pInstanceType
- pVolumeSize
- pEbsDeleteOnTermination
- Label:
default: "Network Configuration"
Parameters:
- pVpc
- pSubnet
ParameterLabels:
pOperatingSystem:
default: "Operating System"
pInstanceType:
default: "Instance Type"
pTagNameValue:
default: "EC2 Name"
pVolumeSize:
default: "Volume Size"
pEbsDeleteOnTermination:
default: "Delete EBS Volume on Termination"
pSubnet:
default: "Subnet"
pVpc:
default: "VPC"
Parameters:
pSubnet:
Description: The subnet to launch the instance in to. It must be part of the VPC chosen above.
Type: AWS::EC2::Subnet::Id
pVpc:
Description: The VPC to launch the EC2 instance in to.
Type: AWS::EC2::VPC::Id
pOperatingSystem:
Type: "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>"
Default: "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-ebs"
pInstanceType:
Description: Desired Instance Size
Type: String
Default: t3.small
AllowedValues:
- t3.small
- t3.medium
- t3.nano
pTagNameValue:
Description: "Required: Enter the tag name you'd like applied to the instance. Tag Name gives the name to the EC2 instance."
Type: String
MinLength: 1
Default: "myBastion"
pVolumeSize:
Description:
Enter the number of GBs you want your volume to be. The minimum value
is 8 GBs
Type: Number
Default: 50
MinValue: 8
pEbsDeleteOnTermination:
Description: "Specify if the EBS volume should be deleted if EC2 is deleted."
Type: String
Default: true
AllowedValues:
- true
- false
Rules:
SubnetInVPC:
Assertions:
- Assert: !EachMemberIn
- !ValueOfAll
- AWS::EC2::Subnet::Id
- VpcId
- !RefAll "AWS::EC2::VPC::Id"
AssertDescription: All subnets must in the VPC
Resources:
rSecurityGroupDefault:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: !Sub "Default SG for SC Product ${pTagNameValue} "
VpcId: !Ref pVpc
SecurityGroupEgress:
- Description: Outbound unrestricted traffic
IpProtocol: "-1"
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: !Ref pTagNameValue
rLinuxEc2:
Type: AWS::EC2::Instance
Metadata:
guard:
SuppressedRules:
- 'EC2_INSTANCE_DETAILED_MONITORING_ENABLED'
Properties:
ImageId: !Ref pOperatingSystem
IamInstanceProfile: !Ref rec2InstanceProfile
Monitoring: false
InstanceType: !Ref pInstanceType
EbsOptimized: true
SourceDestCheck: true
SubnetId: !Ref pSubnet
SecurityGroupIds:
- !Ref rSecurityGroupDefault
BlockDeviceMappings:
- DeviceName: "/dev/xvda"
Ebs:
VolumeSize: !Ref pVolumeSize
DeleteOnTermination: !Ref pEbsDeleteOnTermination
Tags:
- Key: Name
Value: !Ref pTagNameValue
UserData:
Fn::Base64:
yum update -y
## Instance Profiles
## EC2 IAM Roles
rEc2Role:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub "ec2-role-${AWS::StackName}"
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [ec2.amazonaws.com]
Action: ['sts:AssumeRole']
Path: /
ManagedPolicyArns:
- !Sub 'arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore'
- !Sub 'arn:${AWS::Partition}:iam::aws:policy/CloudWatchAgentServerPolicy'
rec2InstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
InstanceProfileName: !Sub "ec2-profile-${AWS::StackName}"
Path: /
Roles:
- !Ref rEc2Role
Outputs:
oLinuxEc2InstanceId:
Description: Resource ID of the newly created EC2 instance
Value: !Ref rLinuxEc2
oLinuxEc2PrivateIP:
Description: Private IP Address for EC2
Value: !GetAtt rLinuxEc2.PrivateIp
-11
View File
@@ -1,11 +0,0 @@
# federated-setup
## [github-action-oidc-federation](./github-actions-oidc-federation.yml)
Setup of the OIDC federation between your GitHub Organization/repository and
your AWS account.
## [github-actions-oidc-federation-and-role](./github-actions-oidc-federation-and-role.yml)
Setup of the OIDC federation between your GitHub Organization/repository and
your AWS account along with a role that only executes on specific branch.
@@ -1,82 +0,0 @@
---
AWSTemplateFormatVersion: "2010-09-09"
Description: Github Actions configuration - OIDC IAM IdP and associated role CI/CD
Parameters:
GitHubOrganization:
Type: String
Description: This is the root organization or personal account where repos are stored (Case Sensitive)
RepositoryName:
Type: String
Description: The repo(s) these roles will have access to. (Use * for all org or personal repos)
Default: "*"
BranchName:
Type: String
Description: Name of the git branch to to trust. (Use * for all branches)
Default: "*"
RoleName:
Type: String
Description: Name the Role
UseExistingProvider:
Type: String
Description: "Only one GitHub Provider can exists. Choose yes if one is already present in account"
Default: "no"
AllowedValues:
- "yes"
- "no"
Conditions:
CreateProvider: !Equals ["no", !Ref UseExistingProvider]
Resources:
IdpGitHubOidc:
Type: AWS::IAM::OIDCProvider
Condition: CreateProvider
Properties:
Url: https://token.actions.githubusercontent.com
ClientIdList:
- sts.amazonaws.com
- !Sub https://github.com/${GitHubOrganization}/${RepositoryName}
ThumbprintList:
- 6938fd4d98bab03faadb97b34396831e3780aea1
Tags:
- Key: Name
Value: !Sub ${RoleName}-OIDC-Provider
RoleGithubActions:
Type: AWS::IAM::Role
Properties:
RoleName: !Ref RoleName
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Action: sts:AssumeRoleWithWebIdentity
Principal:
Federated: !If
- CreateProvider
- !Ref IdpGitHubOidc
- !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:oidc-provider/token.actions.githubusercontent.com
Condition:
StringLike:
token.actions.githubusercontent.com:sub: !Sub repo:${GitHubOrganization}/${RepositoryName}:ref:refs/heads/${BranchName}
ManagedPolicyArns:
## edit the managed policy to give least privileges
- !Sub arn:${AWS::Partition}:iam::aws:policy/AdministratorAccess
Outputs:
IdpGitHubOidc:
Condition: CreateProvider
Description: "ARN of Github OIDC Provider"
Value: !GetAtt IdpGitHubOidc.Arn
RoleGithubActionsARN:
Description: "CICD Role for GitHub Actions"
Value: !GetAtt RoleGithubActions.Arn
@@ -1,43 +0,0 @@
---
AWSTemplateFormatVersion: "2010-09-09"
Description: Github Actions configuration - OIDC IAM IdP Federation
Parameters:
GitHubOrganization:
Type: String
Description: This is the root organization or personal account where repos are stored (Case Sensitive)
Default: ""
RepositoryName:
Type: String
Description: The repo(s) these roles will have access to. (Use * for all org or personal repos)
Default: "*"
RoleName:
Type: String
Description: Name the Role
Default: ""
Resources:
IdpGitHubOidc:
Type: AWS::IAM::OIDCProvider
Properties:
Url: https://token.actions.githubusercontent.com
ClientIdList:
- sts.amazonaws.com
- !Sub https://github.com/${GitHubOrganization}/${RepositoryName}
ThumbprintList:
- 6938fd4d98bab03faadb97b34396831e3780aea1
Tags:
- Key: Name
Value: !Sub ${RoleName}-OIDC-Provider
Outputs:
IdpGitHubOidc:
Description: "ARN of Github OIDC Provider"
Value: !GetAtt IdpGitHubOidc.Arn
+1152 -1086
View File
File diff suppressed because it is too large Load Diff
+16 -15
View File
@@ -1,7 +1,7 @@
{ {
"name": "configure-aws-credentials", "name": "configure-aws-credentials",
"description": "A GitHub Action to configure AWS credentials", "description": "A GitHub Action to configure AWS credentials",
"version": "6.2.0", "version": "6.2.4",
"scripts": { "scripts": {
"build": "tsc", "build": "tsc",
"lint": "biome check --error-on-warnings ./src ./test && markdownlint -i node_modules -i CHANGELOG.md '**/*.md'", "lint": "biome check --error-on-warnings ./src ./test && markdownlint -i node_modules -i CHANGELOG.md '**/*.md'",
@@ -17,26 +17,27 @@
"organization": true "organization": true
}, },
"devDependencies": { "devDependencies": {
"@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-env": "^3.972.70",
"@biomejs/biome": "2.4.15", "@biomejs/biome": "2.5.10",
"@smithy/property-provider": "^4.3.4", "@smithy/property-provider": "^4.5.2",
"@types/node": "^25.9.1", "@types/node": "^26.2.0",
"@vitest/coverage-v8": "4.1.5", "@vitest/coverage-v8": "4.1.10",
"aws-sdk-client-mock": "^4.1.0", "aws-sdk-client-mock": "^4.1.0",
"esbuild": "^0.28.0", "esbuild": "^0.28.2",
"generate-license-file": "^4.1.1", "generate-license-file": "^4.2.1",
"json-schema": "^0.4.0", "json-schema": "^0.4.0",
"markdownlint-cli": "^0.48.0", "markdownlint-cli": "^0.49.1",
"memfs": "^4.57.2", "memfs": "^4.68.1",
"standard-version": "^9.5.0", "standard-version": "^9.5.0",
"typescript": "^6.0.3", "typescript": "^7.0.2",
"vitest": "4.1.5" "vitest": "4.1.10"
}, },
"dependencies": { "dependencies": {
"@actions/core": "^3.0.1", "@actions/core": "^3.0.1",
"@aws-sdk/client-sts": "^3.1049.0", "@aws-sdk/client-sts": "^3.1116.0",
"@smithy/node-http-handler": "^4.7.3", "@aws-sdk/credential-provider-node": "^3.972.63",
"proxy-agent": "^8.0.1" "@smithy/node-http-handler": "^4.11.3",
"proxy-agent": "^8.0.2"
}, },
"keywords": [ "keywords": [
"aws", "aws",
+47 -38
View File
@@ -1,9 +1,10 @@
import { info } from '@actions/core'; import { info } from '@actions/core';
import { STSClient } from '@aws-sdk/client-sts'; import { STSClient } from '@aws-sdk/client-sts';
import { defaultProvider } from '@aws-sdk/credential-provider-node';
import type { AwsCredentialIdentity } from '@aws-sdk/types'; import type { AwsCredentialIdentity } from '@aws-sdk/types';
import { NodeHttpHandler } from '@smithy/node-http-handler'; import { NodeHttpHandler } from '@smithy/node-http-handler';
import { ProxyAgent } from 'proxy-agent'; import { ProxyAgent } from 'proxy-agent';
import { buildCustomUserAgent, errorMessage, getCallerIdentity } from './helpers'; import { buildCustomUserAgent, errorMessage, getCallerIdentity, maskProxyCredentials } from './helpers';
import { ProxyResolver } from './ProxyResolver'; import { ProxyResolver } from './ProxyResolver';
if (!process.env.AWS_EXECUTION_ENV) { if (!process.env.AWS_EXECUTION_ENV) {
@@ -31,6 +32,7 @@ export class CredentialsClient {
} }
if (props.proxyServer) { if (props.proxyServer) {
info('Configuring proxy handler for STS client'); info('Configuring proxy handler for STS client');
maskProxyCredentials(props.proxyServer);
const proxyOptions: { httpProxy: string; httpsProxy: string; noProxy?: string } = { const proxyOptions: { httpProxy: string; httpsProxy: string; noProxy?: string } = {
httpProxy: props.proxyServer, httpProxy: props.proxyServer,
httpsProxy: props.proxyServer, httpsProxy: props.proxyServer,
@@ -53,60 +55,67 @@ export class CredentialsClient {
public get stsClient(): STSClient { public get stsClient(): STSClient {
if (!this._stsClient || this.roleChaining) { if (!this._stsClient || this.roleChaining) {
this._stsClient = new STSClient({ this._stsClient = this.createStsClient();
customUserAgent: buildCustomUserAgent(),
...(this.region !== undefined && { region: this.region }),
...(this.stsEndpoint !== undefined && { endpoint: this.stsEndpoint }),
...(this.requestHandler !== undefined && { requestHandler: this.requestHandler }),
});
} }
return this._stsClient; return this._stsClient;
} }
// Builds an STS client using the action's configured region/endpoint/proxy. When explicit credentials are provided,
// the client uses them directly instead of the SDK default credential provider chain.
// This matters for validateAccountId.
private createStsClient(credentials?: AwsCredentialIdentity): STSClient {
return new STSClient({
customUserAgent: buildCustomUserAgent(),
...(this.region !== undefined && { region: this.region }),
...(this.stsEndpoint !== undefined && { endpoint: this.stsEndpoint }),
...(this.requestHandler !== undefined && { requestHandler: this.requestHandler }),
...(credentials !== undefined && { credentials }),
});
}
// Validates that the credentials the action will hand to subsequent steps actually work, and returns the resolved
// caller identity (account + ARN). "Work" is proven by a sts:GetCallerIdentity call, which both confirms the
// credentials are accepted by AWS and returns the identity for later checks and outputs to use.
public async validateCredentials( public async validateCredentials(
credentials?: AwsCredentialIdentity,
expectedAccessKeyId?: string, expectedAccessKeyId?: string,
roleChaining?: boolean, roleChaining?: boolean,
expectedAccountIds?: string[], ): Promise<Awaited<ReturnType<typeof getCallerIdentity>>> {
) { if (!credentials) {
let credentials: AwsCredentialIdentity; let resolved: AwsCredentialIdentity;
try {
credentials = await this.loadCredentials();
if (!credentials.accessKeyId) {
throw new Error('Access key ID empty after loading credentials');
}
} catch (error) {
throw new Error(`Credentials could not be loaded, please check your action inputs: ${errorMessage(error)}`);
}
if (expectedAccountIds && expectedAccountIds.length > 0 && expectedAccountIds[0] !== '') {
let callerIdentity: Awaited<ReturnType<typeof getCallerIdentity>>;
try { try {
callerIdentity = await getCallerIdentity(this.stsClient); resolved = await this.loadCredentials();
if (!resolved.accessKeyId) {
throw new Error('Access key ID empty after loading credentials');
}
} catch (error) { } catch (error) {
throw new Error(`Could not validate account ID of credentials: ${errorMessage(error)}`); throw new Error(`Credentials could not be loaded, please check your action inputs: ${errorMessage(error)}`);
} }
if (!callerIdentity.Account || !expectedAccountIds.includes(callerIdentity.Account)) { if (!roleChaining && expectedAccessKeyId && expectedAccessKeyId !== resolved.accessKeyId) {
throw new Error(
`The account ID of the provided credentials (${
callerIdentity.Account ?? 'unknown'
}) does not match any of the expected account IDs: ${expectedAccountIds.join(', ')}`,
);
}
}
if (!roleChaining) {
const actualAccessKeyId = credentials.accessKeyId;
if (expectedAccessKeyId && expectedAccessKeyId !== actualAccessKeyId) {
throw new Error( throw new Error(
'Credentials loaded by the SDK do not match the expected access key ID configured by the action', 'Credentials loaded by the SDK do not match the expected access key ID configured by the action',
); );
} }
} }
const client = credentials ? this.createStsClient(credentials) : this.stsClient;
try {
return await getCallerIdentity(client);
} catch (error) {
throw new Error(`Credentials could not be loaded, please check your action inputs: ${errorMessage(error)}`);
}
} }
private async loadCredentials() { private async loadCredentials() {
const config = {} as { requestHandler?: NodeHttpHandler }; // Previously we constructed a new client, but that picks up the default provider chain including the endpoint.
if (this.requestHandler !== undefined) config.requestHandler = this.requestHandler; // Explicitly calling the default provider chain allows us to pass in the endpoint and region as well as the
const client = new STSClient(config); // proxy config.
return client.config.credentials(); return defaultProvider({
clientConfig: {
...(this.region !== undefined && { region: this.region }),
...(this.stsEndpoint !== undefined && { endpoint: this.stsEndpoint }),
...(this.requestHandler !== undefined && { requestHandler: this.requestHandler }),
},
})();
} }
} }
+2 -6
View File
@@ -2,11 +2,7 @@ import assert from 'node:assert';
import path from 'node:path'; import path from 'node:path';
import * as core from '@actions/core'; import * as core from '@actions/core';
import type { AssumeRoleCommandInput, STSClient, Tag } from '@aws-sdk/client-sts'; import type { AssumeRoleCommandInput, STSClient, Tag } from '@aws-sdk/client-sts';
import { import { AssumeRoleCommand, AssumeRoleWithWebIdentityCommand } from '@aws-sdk/client-sts';
AssumeRoleCommand,
AssumeRoleWithWebIdentityCommand,
PackedPolicyTooLargeException,
} from '@aws-sdk/client-sts';
import type { CredentialsClient } from './CredentialsClient'; import type { CredentialsClient } from './CredentialsClient';
import { errorMessage, isDefined, readFileUtf8, sanitizeGitHubVariables } from './helpers'; import { errorMessage, isDefined, readFileUtf8, sanitizeGitHubVariables } from './helpers';
@@ -65,7 +61,7 @@ async function assumeRoleWithCredentials(params: AssumeRoleCommandInput, client:
const creds = await client.send(new AssumeRoleCommand({ ...params })); const creds = await client.send(new AssumeRoleCommand({ ...params }));
return creds; return creds;
} catch (error) { } catch (error) {
if (error instanceof PackedPolicyTooLargeException) { if ((error as { name?: string })?.name === 'PackedPolicyTooLargeException') {
core.info('Session tag size is too large; dropping droppable tags and retrying.'); core.info('Session tag size is too large; dropping droppable tags and retrying.');
const droppableKeys = new Set(DROPPABLE_TAG_SOURCES.map((s) => s.key)); const droppableKeys = new Set(DROPPABLE_TAG_SOURCES.map((s) => s.key));
params.Tags = params.Tags?.filter((tag) => !droppableKeys.has(tag.Key ?? '')); params.Tags = params.Tags?.filter((tag) => !droppableKeys.has(tag.Key ?? ''));
+55 -19
View File
@@ -3,8 +3,8 @@ import * as path from 'node:path';
import * as core from '@actions/core'; import * as core from '@actions/core';
import type { Credentials, STSClient } from '@aws-sdk/client-sts'; import type { Credentials, STSClient } from '@aws-sdk/client-sts';
import { GetCallerIdentityCommand } from '@aws-sdk/client-sts'; import { GetCallerIdentityCommand } from '@aws-sdk/client-sts';
import type { AwsCredentialIdentity } from '@aws-sdk/types';
import type { UserAgent } from '@smithy/types'; import type { UserAgent } from '@smithy/types';
import type { CredentialsClient } from './CredentialsClient';
const MAX_TAG_VALUE_LENGTH = 256; const MAX_TAG_VALUE_LENGTH = 256;
const SANITIZATION_CHARACTER = '_'; const SANITIZATION_CHARACTER = '_';
@@ -150,9 +150,8 @@ export async function getCallerIdentity(client: STSClient): Promise<{ Account: s
return result; return result;
} }
// Obtains account ID from STS Client and sets it as output // Emits the account ID and ARN of an already-resolved caller identity as action outputs.
export async function exportAccountId(credentialsClient: CredentialsClient, maskAccountId?: boolean) { export function exportAccountId(identity: { Account: string; Arn: string }, maskAccountId?: boolean) {
const identity = await getCallerIdentity(credentialsClient.stsClient);
const accountId = identity.Account; const accountId = identity.Account;
const arn = identity.Arn; const arn = identity.Arn;
if (maskAccountId) { if (maskAccountId) {
@@ -164,6 +163,56 @@ export async function exportAccountId(credentialsClient: CredentialsClient, mask
return accountId; return accountId;
} }
// Validates that the account of the already-resolved caller identity is in the allow-list provided via the
// `allowed-account-ids` input.
export function validateAccountId(expectedAccountIds: string[] | undefined, account: string | undefined): void {
const allowedAccountIds = expectedAccountIds?.filter((id) => id !== '') ?? [];
if (allowedAccountIds.length === 0) {
return;
}
if (!account || !allowedAccountIds.includes(account)) {
// Account IDs are deliberately omitted: this error reaches the job log before any mask exists.
throw new Error('The account ID of the provided credentials does not match any of the allowed account IDs');
}
}
// Converts the STS Credentials shape (returned by AssumeRole and provided as action inputs) into
// the AwsCredentialIdentity shape the SDK expects when credentials are supplied explicitly to a
// client. Returns undefined if the access key ID or secret access key is missing.
export function toCredentialIdentity(creds?: Partial<Credentials>): AwsCredentialIdentity | undefined {
if (!creds?.AccessKeyId || !creds.SecretAccessKey) {
return undefined;
}
return {
accessKeyId: creds.AccessKeyId,
secretAccessKey: creds.SecretAccessKey,
...(creds.SessionToken && { sessionToken: creds.SessionToken }),
};
}
// Registers any userinfo embedded in a proxy URL as secrets so it is masked in job logs.
// First the literal proxy string, then any username/password components if parseable.
// If the username/password is percent-encoded, the decoded form is also masked.
export function maskProxyCredentials(proxyServer: string): void {
core.setSecret(proxyServer);
let url: URL;
try {
url = new URL(proxyServer);
} catch (_) {
return;
}
for (const part of [url.username, url.password]) {
if (!part) continue;
core.setSecret(part);
try {
const decoded = decodeURIComponent(part);
if (decoded !== part) core.setSecret(decoded);
} catch (_) {
// malformed percent-encoding; the raw form is already masked
}
}
}
// Tags have a more restrictive set of acceptable characters than GitHub environment variables can. // Tags have a more restrictive set of acceptable characters than GitHub environment variables can.
// This replaces anything not conforming to the tag restrictions by inverting the regular expression. // This replaces anything not conforming to the tag restrictions by inverting the regular expression.
// See the AWS documentation for constraint specifics https://docs.aws.amazon.com/STS/latest/APIReference/API_Tag.html. // See the AWS documentation for constraint specifics https://docs.aws.amazon.com/STS/latest/APIReference/API_Tag.html.
@@ -231,13 +280,13 @@ export async function retryAndBackoff<T>(
`Retrying after ${Math.floor(delay)}ms.`, `Retrying after ${Math.floor(delay)}ms.`,
); );
await sleep(delay);
if (nextRetry >= maxRetries) { if (nextRetry >= maxRetries) {
core.info(`Retry${opName}: reached max retries (${maxRetries}); giving up.`); core.info(`Retry${opName}: reached max retries (${maxRetries}); giving up.`);
throw err; throw err;
} }
await sleep(delay);
return await retryAndBackoff(fn, isRetryable, maxRetries, nextRetry, base, label); return await retryAndBackoff(fn, isRetryable, maxRetries, nextRetry, base, label);
} }
} }
@@ -252,19 +301,6 @@ export function isDefined<T>(i: T | undefined | null): i is T {
} }
/* c8 ignore stop */ /* c8 ignore stop */
export async function areCredentialsValid(credentialsClient: CredentialsClient) {
const client = credentialsClient.stsClient;
try {
const identity = await client.send(new GetCallerIdentityCommand({}));
if (identity.Account) {
return true;
}
return false;
} catch (_) {
return false;
}
}
/** /**
* Like core.getBooleanInput, but respects the required option. * Like core.getBooleanInput, but respects the required option.
* *
+49 -47
View File
@@ -3,15 +3,17 @@ import type { AssumeRoleCommandOutput } from '@aws-sdk/client-sts';
import { assumeRole } from './assumeRole'; import { assumeRole } from './assumeRole';
import { CredentialsClient } from './CredentialsClient'; import { CredentialsClient } from './CredentialsClient';
import { import {
areCredentialsValid,
errorMessage, errorMessage,
exportAccountId, exportAccountId,
exportCredentials, exportCredentials,
exportRegion, exportRegion,
getBooleanInput, getBooleanInput,
getCallerIdentity,
retryAndBackoff, retryAndBackoff,
toCredentialIdentity,
translateEnvVariables, translateEnvVariables,
unsetCredentials, unsetCredentials,
validateAccountId,
verifyKeys, verifyKeys,
} from './helpers'; } from './helpers';
import { writeProfileFiles } from './profileManager'; import { writeProfileFiles } from './profileManager';
@@ -51,8 +53,8 @@ export async function run() {
}); });
const roleChaining = getBooleanInput('role-chaining', { required: false }); const roleChaining = getBooleanInput('role-chaining', { required: false });
const outputCredentials = getBooleanInput('output-credentials', { required: false }); const outputCredentials = getBooleanInput('output-credentials', { required: false });
// Default to always outputting environment credentials unless profile is specified. If profile is specified, default to // Default to always outputting environment credentials unless profile is specified. If profile is specified,
// no environment credentials (but still output them if the user specifically requests it). // default to no environment credentials (but still output them if the user specifically requests it).
const outputEnvCredentials = getBooleanInput('output-env-credentials', { required: false, default: !awsProfile }); const outputEnvCredentials = getBooleanInput('output-env-credentials', { required: false, default: !awsProfile });
const unsetCurrentCredentials = getBooleanInput('unset-current-credentials', { required: false }); const unsetCurrentCredentials = getBooleanInput('unset-current-credentials', { required: false });
let disableRetry = getBooleanInput('disable-retry', { required: false }); let disableRetry = getBooleanInput('disable-retry', { required: false });
@@ -163,8 +165,16 @@ export async function run() {
//if the user wants to attempt to use existing credentials, check if we have some already //if the user wants to attempt to use existing credentials, check if we have some already
if (useExistingCredentials) { if (useExistingCredentials) {
const validCredentials = await areCredentialsValid(credentialsClient); const identity = await (async () => {
if (validCredentials) { try {
return await getCallerIdentity(credentialsClient.stsClient);
} catch {
return null;
}
})();
if (identity) {
// The allowed-account-ids guardrail applies to reused credentials too.
validateAccountId(expectedAccountIds, identity.Account);
core.notice('Pre-existing credentials are valid. No need to generate new ones.'); core.notice('Pre-existing credentials are valid. No need to generate new ones.');
if (timeoutId) clearTimeout(timeoutId); if (timeoutId) clearTimeout(timeoutId);
return; return;
@@ -198,27 +208,38 @@ export async function run() {
writeProfileFiles(awsProfile, { AccessKeyId, SecretAccessKey, SessionToken }, region, overwriteAwsProfile); writeProfileFiles(awsProfile, { AccessKeyId, SecretAccessKey, SessionToken }, region, overwriteAwsProfile);
} }
} else if (!webIdentityTokenFile && !roleChaining) { } else if (!webIdentityTokenFile && !roleChaining) {
// Proceed only if credentials can be picked up // Proceed only if credentials can be picked up. validateCredentials resolves the ambient
await withRetry( // credentials via the SDK default chain, proves they work, and returns the caller identity.
() => credentialsClient.validateCredentials(undefined, roleChaining, expectedAccountIds), const identity = await withRetry(
() => credentialsClient.validateCredentials(undefined, undefined, roleChaining),
'validateCredentials', 'validateCredentials',
); );
sourceAccountId = await withRetry(() => exportAccountId(credentialsClient, maskAccountId), 'exportAccountId'); // Enforce the allowed-account-ids guardrail unless a role will be assumed, in which case the
// final account is validated after assumeRole (these ambient credentials are the source account).
if (!roleToAssume) {
validateAccountId(expectedAccountIds, identity.Account);
}
sourceAccountId = exportAccountId(identity, maskAccountId);
} }
if (AccessKeyId || roleChaining) { if (AccessKeyId || roleChaining) {
// Validate that the SDK can actually pick up credentials. // Validate that the credentials the action will use actually work, and resolve their identity.
// This validates cases where this action is using existing environment credentials, const resolutionCredentials =
// and cases where the user intended to provide input credentials but the secrets inputs resolved to empty strings. outputEnvCredentials || !AccessKeyId
// Skip when output-env-credentials is false: input IAM keys were not written to env, so ? undefined
// the default chain would resolve to ambient runner credentials and the access-key check : toCredentialIdentity({ AccessKeyId, SecretAccessKey, SessionToken });
// would spuriously fail (see #1554). const identity = await withRetry(
() => credentialsClient.validateCredentials(resolutionCredentials, AccessKeyId, roleChaining),
'validateCredentials',
);
// Enforce the allowed-account-ids guardrail unless a role will be assumed (the final account is
// validated after assumeRole; these are the source credentials).
if (!roleToAssume) {
validateAccountId(expectedAccountIds, identity.Account);
}
sourceAccountId = identity.Account;
if (outputEnvCredentials) { if (outputEnvCredentials) {
await withRetry( exportAccountId(identity, maskAccountId);
() => credentialsClient.validateCredentials(AccessKeyId, roleChaining, expectedAccountIds),
'validateCredentials',
);
sourceAccountId = await withRetry(() => exportAccountId(credentialsClient, maskAccountId), 'exportAccountId');
} }
} }
if (customTags && (useGitHubOIDCProvider() || webIdentityTokenFile)) { if (customTags && (useGitHubOIDCProvider() || webIdentityTokenFile)) {
@@ -252,24 +273,15 @@ export async function run() {
} while (specialCharacterWorkaround && !verifyKeys(roleCredentials.Credentials)); } while (specialCharacterWorkaround && !verifyKeys(roleCredentials.Credentials));
core.info(`Authenticated as assumedRoleId ${roleCredentials.AssumedRoleUser?.AssumedRoleId}`); core.info(`Authenticated as assumedRoleId ${roleCredentials.AssumedRoleUser?.AssumedRoleId}`);
exportCredentials(roleCredentials.Credentials, outputCredentials, outputEnvCredentials); exportCredentials(roleCredentials.Credentials, outputCredentials, outputEnvCredentials);
// Validate that the SDK can pick up the assumed-role credentials from the environment. // Validate the assumed-role credentials and resolve their identity.
// Skip when output-env-credentials is false: the credentials were never written to env, const identity = await withRetry(
// so the default credential provider chain would resolve to ambient runner credentials () => credentialsClient.validateCredentials(toCredentialIdentity(roleCredentials.Credentials)),
// (e.g. an EC2 instance profile) and the access-key-id check would spuriously fail. 'validateCredentials',
// Skip when using a profile: validation runs after the profile file is written below. );
if ((!process.env.GITHUB_ACTIONS || AccessKeyId) && !awsProfile && outputEnvCredentials) { // Enforce the allowed-account-ids guardrail against the assumed (final) account.
await withRetry( validateAccountId(expectedAccountIds, identity.Account);
() =>
credentialsClient.validateCredentials(
roleCredentials.Credentials?.AccessKeyId,
roleChaining,
expectedAccountIds,
),
'validateCredentials',
);
}
if (outputEnvCredentials) { if (outputEnvCredentials) {
await withRetry(() => exportAccountId(credentialsClient, maskAccountId), 'exportAccountId'); exportAccountId(identity, maskAccountId);
} }
// Write profile files if profile mode is enabled // Write profile files if profile mode is enabled
@@ -279,18 +291,8 @@ export async function run() {
} }
// If user provided IAM User Credentials and then we assumed a role, overwrite the profile file to add // If user provided IAM User Credentials and then we assumed a role, overwrite the profile file to add
// the session token. (this only overwrites the profile within a single run of the action). // the session token. (this only overwrites the profile within a single run of the action).
// We then validate the credentials to make sure they work.
if (AccessKeyId || !process.env.GITHUB_ACTIONS) { if (AccessKeyId || !process.env.GITHUB_ACTIONS) {
writeProfileFiles(awsProfile, roleCredentials.Credentials, region, true); writeProfileFiles(awsProfile, roleCredentials.Credentials, region, true);
await withRetry(
() =>
credentialsClient.validateCredentials(
roleCredentials.Credentials?.AccessKeyId,
roleChaining,
expectedAccountIds,
),
'validateCredentials',
);
} else { } else {
writeProfileFiles(awsProfile, roleCredentials.Credentials, region, overwriteAwsProfile); writeProfileFiles(awsProfile, roleCredentials.Credentials, region, overwriteAwsProfile);
} }
+7
View File
@@ -53,8 +53,15 @@ export function parseIni(iniData: string): Record<string, Record<string, string>
export function stringifyIni(data: Record<string, Record<string, string>>): string { export function stringifyIni(data: Record<string, Record<string, string>>): string {
const sections: string[] = []; const sections: string[] = [];
for (const [sectionName, sectionData] of Object.entries(data)) { for (const [sectionName, sectionData] of Object.entries(data)) {
if (/[\r\n]/.test(sectionName)) {
throw new Error('INI section names must not contain newline characters');
}
const lines: string[] = [`[${sectionName}]`]; const lines: string[] = [`[${sectionName}]`];
for (const [key, value] of Object.entries(sectionData)) { for (const [key, value] of Object.entries(sectionData)) {
// A newline in a key or value would inject arbitrary INI lines (e.g. credential_process).
if (/[\r\n]/.test(key) || /[\r\n]/.test(value)) {
throw new Error('INI keys and values must not contain newline characters');
}
lines.push(`${key} = ${value}`); lines.push(`${key} = ${value}`);
} }
sections.push(lines.join('\n')); sections.push(lines.join('\n'));
+30
View File
@@ -0,0 +1,30 @@
import { describe, expect, it, vi } from 'vitest';
vi.mock('@aws-sdk/credential-provider-node', () => ({
defaultProvider: vi.fn(() => async () => ({ accessKeyId: 'AKIA', secretAccessKey: 'secret' })),
}));
import { defaultProvider } from '@aws-sdk/credential-provider-node';
import { CredentialsClient } from '../src/CredentialsClient';
describe('CredentialsClient', {}, () => {
it('pins ambient credential resolution to the configured region and STS endpoint', {}, async () => {
const client = new CredentialsClient({
region: 'eu-west-1',
stsEndpoint: 'https://sts.example.com',
roleChaining: false,
});
// biome-ignore lint/suspicious/noExplicitAny: any required to call private method
await (client as any).loadCredentials();
expect(defaultProvider).toHaveBeenCalledWith({
clientConfig: expect.objectContaining({ region: 'eu-west-1', endpoint: 'https://sts.example.com' }),
});
});
it('omits unset client config values from ambient credential resolution', {}, async () => {
const client = new CredentialsClient({ region: 'eu-west-1', roleChaining: false });
// biome-ignore lint/suspicious/noExplicitAny: any required to call private method
await (client as any).loadCredentials();
expect(defaultProvider).toHaveBeenLastCalledWith({ clientConfig: { region: 'eu-west-1' } });
});
});
+39
View File
@@ -126,6 +126,45 @@ describe('Configure AWS Credentials helpers', {}, () => {
expect(core.exportVariable).toHaveBeenCalledWith('AWS_SESSION_TOKEN', ''); expect(core.exportVariable).toHaveBeenCalledWith('AWS_SESSION_TOKEN', '');
}); });
describe('maskProxyCredentials', {}, () => {
it('masks username and password embedded in a proxy URL', {}, () => {
helpers.maskProxyCredentials('http://user:secretpass@proxy.example.com:8080');
expect(core.setSecret).toHaveBeenCalledWith('user');
expect(core.setSecret).toHaveBeenCalledWith('secretpass');
});
it('masks both encoded and decoded forms of the credentials', {}, () => {
helpers.maskProxyCredentials('http://user:p%40ss@proxy.example.com:8080');
expect(core.setSecret).toHaveBeenCalledWith('p%40ss');
expect(core.setSecret).toHaveBeenCalledWith('p@ss');
});
it('masks the whole value even without embedded credentials or when unparseable', {}, () => {
helpers.maskProxyCredentials('http://proxy.example.com:8080');
expect(core.setSecret).toHaveBeenCalledWith('http://proxy.example.com:8080');
helpers.maskProxyCredentials('not a url');
expect(core.setSecret).toHaveBeenCalledWith('not a url');
// no username/password parts, so exactly one mask per call
expect(core.setSecret).toHaveBeenCalledTimes(2);
});
});
describe('validateAccountId', {}, () => {
it('enforces the allow-list even when the first element is empty', {}, () => {
expect(() => helpers.validateAccountId(['', '999999999999'], '111111111111')).toThrow(/does not match/);
});
it('passes an allowed account despite empty entries in the list', {}, () => {
expect(() => helpers.validateAccountId(['', '111111111111'], '111111111111')).not.toThrow();
});
it('skips validation only when no non-empty entries exist', {}, () => {
expect(() => helpers.validateAccountId(undefined, '111111111111')).not.toThrow();
expect(() => helpers.validateAccountId([], '111111111111')).not.toThrow();
expect(() => helpers.validateAccountId([''], '111111111111')).not.toThrow();
});
});
describe('filesystem helpers', {}, () => { describe('filesystem helpers', {}, () => {
describe('isSymlink', {}, () => { describe('isSymlink', {}, () => {
it('returns true for a symlink', {}, () => { it('returns true for a symlink', {}, () => {
+125 -12
View File
@@ -3,7 +3,6 @@ import {
AssumeRoleCommand, AssumeRoleCommand,
AssumeRoleWithWebIdentityCommand, AssumeRoleWithWebIdentityCommand,
GetCallerIdentityCommand, GetCallerIdentityCommand,
PackedPolicyTooLargeException,
STSClient, STSClient,
} from '@aws-sdk/client-sts'; } from '@aws-sdk/client-sts';
import { mockClient } from 'aws-sdk-client-mock'; import { mockClient } from 'aws-sdk-client-mock';
@@ -331,10 +330,11 @@ describe('Configure AWS Credentials', {}, () => {
}); });
it('drops droppable tags and retries on PackedPolicyTooLargeException', {}, async () => { it('drops droppable tags and retries on PackedPolicyTooLargeException', {}, async () => {
vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.IAM_ASSUMEROLE_INPUTS)); vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.IAM_ASSUMEROLE_INPUTS));
mockedSTSClient // Reject with a plain error carrying only the `name`, NOT an instance of the SDK class. This
.on(AssumeRoleCommand) // mirrors the bundled action, where the error can be deserialized by a second, non-identical
.rejectsOnce(new PackedPolicyTooLargeException({ message: 'too large', $metadata: {} })) // copy of PackedPolicyTooLargeException so `instanceof` fails; the recovery must key off `name`.
.resolvesOnce(mocks.outputs.STS_CREDENTIALS); const packedPolicyError = Object.assign(new Error('too large'), { name: 'PackedPolicyTooLargeException' });
mockedSTSClient.on(AssumeRoleCommand).rejectsOnce(packedPolicyError).resolvesOnce(mocks.outputs.STS_CREDENTIALS);
await run(); await run();
expect(core.info).toHaveBeenCalledWith('Session tag size is too large; dropping droppable tags and retrying.'); expect(core.info).toHaveBeenCalledWith('Session tag size is too large; dropping droppable tags and retrying.');
const retryInput = mockedSTSClient.commandCalls(AssumeRoleCommand)[1].args[0].input; const retryInput = mockedSTSClient.commandCalls(AssumeRoleCommand)[1].args[0].input;
@@ -618,6 +618,9 @@ describe('Configure AWS Credentials', {}, () => {
}); });
it("doesn't export credentials as environment variables if told not to", {}, async () => { it("doesn't export credentials as environment variables if told not to", {}, async () => {
mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolvesOnce(mocks.outputs.STS_CREDENTIALS); mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolvesOnce(mocks.outputs.STS_CREDENTIALS);
// Credentials are validated (and their account resolved) even when not exported to the
// environment, so GetCallerIdentity is now called on the explicit assumed-role credentials.
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.NO_ENV_CREDS_INPUTS)); vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.NO_ENV_CREDS_INPUTS));
vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken'); vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken');
process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token'; process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token';
@@ -628,6 +631,7 @@ describe('Configure AWS Credentials', {}, () => {
}); });
it('can export creds as step outputs without exporting as env variables', {}, async () => { it('can export creds as step outputs without exporting as env variables', {}, async () => {
mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolvesOnce(mocks.outputs.STS_CREDENTIALS); mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolvesOnce(mocks.outputs.STS_CREDENTIALS);
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.STEP_BUT_NO_ENV_INPUTS)); vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.STEP_BUT_NO_ENV_INPUTS));
vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken'); vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken');
process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token'; process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token';
@@ -837,7 +841,7 @@ describe('Configure AWS Credentials', {}, () => {
await run(); await run();
expect(core.setFailed).toHaveBeenCalledWith( expect(core.setFailed).toHaveBeenCalledWith(
'The account ID of the provided credentials (111111111111) does not match any of the expected account IDs: 999999999999', 'The account ID of the provided credentials does not match any of the allowed account IDs',
); );
}); });
@@ -857,7 +861,7 @@ describe('Configure AWS Credentials', {}, () => {
await run(); await run();
expect(core.setFailed).toHaveBeenCalledWith( expect(core.setFailed).toHaveBeenCalledWith(
'The account ID of the provided credentials (111111111111) does not match any of the expected account IDs: 999999999999, 888888888888', 'The account ID of the provided credentials does not match any of the allowed account IDs',
); );
}); });
@@ -897,6 +901,65 @@ describe('Configure AWS Credentials', {}, () => {
expect(core.info).toHaveBeenCalledWith('Authenticated as assumedRoleId AROAFAKEASSUMEDROLEID'); expect(core.info).toHaveBeenCalledWith('Authenticated as assumedRoleId AROAFAKEASSUMEDROLEID');
}); });
it('fails with OIDC when account ID does not match allowed list', async () => {
// Regression test for the allowed-account-ids bypass: in a real runner (GITHUB_ACTIONS=true)
// authenticating via OIDC, the account-ID guardrail was previously never enforced.
vi.mocked(core.getInput).mockImplementation(
mocks.getInput({
...mocks.GH_OIDC_INPUTS,
'allowed-account-ids': '999999999999',
}),
);
vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken');
mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolves(mocks.outputs.STS_CREDENTIALS);
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token';
await run();
expect(core.setFailed).toHaveBeenCalledWith(
'The account ID of the provided credentials does not match any of the allowed account IDs',
);
});
it('fails with OIDC and output-env-credentials false when account ID does not match', async () => {
// The guardrail must hold even when credentials are never written to the environment.
vi.mocked(core.getInput).mockImplementation(
mocks.getInput({
...mocks.NO_ENV_CREDS_INPUTS,
'allowed-account-ids': '999999999999',
}),
);
vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken');
mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolves(mocks.outputs.STS_CREDENTIALS);
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token';
await run();
expect(core.setFailed).toHaveBeenCalledWith(
'The account ID of the provided credentials does not match any of the allowed account IDs',
);
});
it('fails with assume role when assumed account ID does not match allowed list', async () => {
vi.mocked(core.getInput).mockImplementation(
mocks.getInput({
...mocks.IAM_ASSUMEROLE_INPUTS,
'allowed-account-ids': '999999999999',
}),
);
mockedSTSClient.on(AssumeRoleCommand).resolves(mocks.outputs.STS_CREDENTIALS);
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
// biome-ignore lint/suspicious/noExplicitAny: any required to mock private method
vi.spyOn(CredentialsClient.prototype as any, 'loadCredentials')
.mockResolvedValueOnce({ accessKeyId: 'MYAWSACCESSKEYID' })
.mockResolvedValueOnce({ accessKeyId: 'STSAWSACCESSKEYID' });
await run();
expect(core.setFailed).toHaveBeenCalledWith(
'The account ID of the provided credentials does not match any of the allowed account IDs',
);
});
it('handles GetCallerIdentity API failure gracefully', async () => { it('handles GetCallerIdentity API failure gracefully', async () => {
vi.mocked(core.getInput).mockImplementation( vi.mocked(core.getInput).mockImplementation(
mocks.getInput({ mocks.getInput({
@@ -911,7 +974,11 @@ describe('Configure AWS Credentials', {}, () => {
}); });
await run(); await run();
expect(core.setFailed).toHaveBeenCalledWith('Could not validate account ID of credentials: API Error'); // The account allow-list now reuses the single liveness GetCallerIdentity call, so an STS
// failure surfaces as a credential-loading failure rather than a dedicated account-check error.
expect(core.setFailed).toHaveBeenCalledWith(
'Credentials could not be loaded, please check your action inputs: API Error',
);
}); });
it('ignores validation when allowed-account-ids is empty', async () => { it('ignores validation when allowed-account-ids is empty', async () => {
@@ -948,6 +1015,33 @@ describe('Configure AWS Credentials', {}, () => {
await run(); await run();
expect(core.setFailed).not.toHaveBeenCalled(); expect(core.setFailed).not.toHaveBeenCalled();
}); });
it('fails on the use-existing-credentials path when the account is not allowed', async () => {
vi.mocked(core.getInput).mockImplementation(
mocks.getInput({
...mocks.USE_EXISTING_CREDENTIALS_INPUTS,
'allowed-account-ids': '999999999999',
}),
);
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
await run();
expect(core.setFailed).toHaveBeenCalledWith(expect.stringContaining('does not match'));
});
it('reuses existing credentials when their account is allowed', async () => {
vi.mocked(core.getInput).mockImplementation(
mocks.getInput({
...mocks.USE_EXISTING_CREDENTIALS_INPUTS,
'allowed-account-ids': '111111111111',
}),
);
mockedSTSClient.on(GetCallerIdentityCommand).resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
await run();
expect(core.notice).toHaveBeenCalledWith('Pre-existing credentials are valid. No need to generate new ones.');
expect(core.setFailed).not.toHaveBeenCalled();
});
}); });
describe('Global Timeout Configuration', {}, () => { describe('Global Timeout Configuration', {}, () => {
@@ -1173,6 +1267,21 @@ describe('Configure AWS Credentials', {}, () => {
expect(core.setFailed).not.toHaveBeenCalled(); expect(core.setFailed).not.toHaveBeenCalled();
}); });
it('masks credentials embedded in the proxy URL', async () => {
vi.mocked(core.getInput).mockImplementation(
mocks.getInput({
...mocks.GH_OIDC_INPUTS,
'http-proxy': 'http://user:secretpass@proxy.example.com:8080',
}),
);
await run();
expect(core.setSecret).toHaveBeenCalledWith('user');
expect(core.setSecret).toHaveBeenCalledWith('secretpass');
expect(core.setFailed).not.toHaveBeenCalled();
});
}); });
describe('AWS Profile Support', {}, () => { describe('AWS Profile Support', {}, () => {
@@ -1373,7 +1482,7 @@ describe('Configure AWS Credentials', {}, () => {
}); });
describe('Retry Behavior', {}, () => { describe('Retry Behavior', {}, () => {
it('retries exportAccountId on transient GetCallerIdentity failure', async () => { it('retries validateCredentials on transient GetCallerIdentity failure', async () => {
vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.IAM_USER_INPUTS)); vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.IAM_USER_INPUTS));
// biome-ignore lint/suspicious/noExplicitAny: any required to mock private method // biome-ignore lint/suspicious/noExplicitAny: any required to mock private method
vi.spyOn(CredentialsClient.prototype as any, 'loadCredentials').mockResolvedValue({ vi.spyOn(CredentialsClient.prototype as any, 'loadCredentials').mockResolvedValue({
@@ -1384,7 +1493,9 @@ describe('Configure AWS Credentials', {}, () => {
.rejectsOnce(new Error('throttled')) .rejectsOnce(new Error('throttled'))
.resolves({ ...mocks.outputs.GET_CALLER_IDENTITY }); .resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
await run(); await run();
expect(core.info).toHaveBeenCalledWith(expect.stringContaining('Retry exportAccountId')); // The single liveness GetCallerIdentity call lives in validateCredentials, so transient STS
// failures are retried under that label (the account ID is then resolved without a second call).
expect(core.info).toHaveBeenCalledWith(expect.stringContaining('Retry validateCredentials'));
expect(core.setFailed).not.toHaveBeenCalled(); expect(core.setFailed).not.toHaveBeenCalled();
}); });
@@ -1414,7 +1525,7 @@ describe('Configure AWS Credentials', {}, () => {
expect(core.info).not.toHaveBeenCalledWith(expect.stringContaining('Retry')); expect(core.info).not.toHaveBeenCalledWith(expect.stringContaining('Retry'));
}); });
it('retries exportAccountId after role assumption (issue #1681)', async () => { it('retries the post-assume identity check on a transient invalid-token error (issue #1681)', async () => {
vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.GH_OIDC_INPUTS)); vi.mocked(core.getInput).mockImplementation(mocks.getInput(mocks.GH_OIDC_INPUTS));
vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken'); vi.mocked(core.getIDToken).mockResolvedValue('testoidctoken');
mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolves(mocks.outputs.STS_CREDENTIALS); mockedSTSClient.on(AssumeRoleWithWebIdentityCommand).resolves(mocks.outputs.STS_CREDENTIALS);
@@ -1424,7 +1535,9 @@ describe('Configure AWS Credentials', {}, () => {
.resolves({ ...mocks.outputs.GET_CALLER_IDENTITY }); .resolves({ ...mocks.outputs.GET_CALLER_IDENTITY });
process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token'; process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN = 'fake-token';
await run(); await run();
expect(core.info).toHaveBeenCalledWith(expect.stringContaining('Retry exportAccountId')); // Freshly-assumed credentials can be briefly rejected by STS (eventual consistency). The
// liveness GetCallerIdentity now runs inside validateCredentials, so the retry happens there.
expect(core.info).toHaveBeenCalledWith(expect.stringContaining('Retry validateCredentials'));
expect(core.info).toHaveBeenCalledWith( expect(core.info).toHaveBeenCalledWith(
expect.stringContaining('The security token included in the request is invalid'), expect.stringContaining('The security token included in the request is invalid'),
); );
+35 -1
View File
@@ -50,7 +50,7 @@ describe('Profile Manager', {}, () => {
it('guards against __proto__ section pollution', {}, () => { it('guards against __proto__ section pollution', {}, () => {
const result = parseIni('[__proto__]\npolluted=true\n[safe]\nkey=val\n'); const result = parseIni('[__proto__]\npolluted=true\n[safe]\nkey=val\n');
expect(result.__proto__).not.toHaveProperty('polluted'); expect(Object.getPrototypeOf(result)).not.toHaveProperty('polluted');
expect(result.safe).toEqual({ key: 'val' }); expect(result.safe).toEqual({ key: 'val' });
}); });
@@ -114,6 +114,22 @@ describe('Profile Manager', {}, () => {
const result = stringifyIni({ dev: {} }); const result = stringifyIni({ dev: {} });
expect(result).toBe('[dev]\n'); expect(result).toBe('[dev]\n');
}); });
it('rejects values containing newlines', {}, () => {
expect(() =>
stringifyIni({ dev: { aws_session_token: 'token\n[injected]\ncredential_process = evil' } }),
).toThrow('must not contain newline characters');
});
it('rejects keys containing newlines', {}, () => {
expect(() => stringifyIni({ dev: { 'key\ninjected': 'val' } })).toThrow('must not contain newline characters');
});
it('rejects section names containing newlines', {}, () => {
expect(() => stringifyIni({ 'dev\r\n[injected]': { key: 'val' } })).toThrow(
'must not contain newline characters',
);
});
}); });
describe('validateProfileName', {}, () => { describe('validateProfileName', {}, () => {
@@ -423,6 +439,24 @@ describe('Profile Manager', {}, () => {
expect(configParsed['profile dev'].region).toBe('us-east-1'); expect(configParsed['profile dev'].region).toBe('us-east-1');
}); });
it('refuses to write credentials containing newlines instead of injecting profiles', {}, () => {
expect(() =>
writeProfileFiles(
'dev',
{
AccessKeyId: 'AKIAIOSFODNN7EXAMPLE',
SecretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
SessionToken: 'token\n[injected]\ncredential_process = evil-command',
},
'us-east-1',
false,
),
).toThrow('must not contain newline characters');
const credsPath = getProfileFilePaths().credentials;
expect(fs.existsSync(credsPath)).toBe(false);
});
it('uses correct section naming for default profile', {}, () => { it('uses correct section naming for default profile', {}, () => {
writeProfileFiles( writeProfileFiles(
'default', 'default',