diff --git a/examples/e2e/app-pages-router/app/rewrite-destination/page.tsx b/examples/e2e/app-pages-router/app/rewrite-destination/page.tsx index 67a7bab2..d4d4c9ff 100644 --- a/examples/e2e/app-pages-router/app/rewrite-destination/page.tsx +++ b/examples/e2e/app-pages-router/app/rewrite-destination/page.tsx @@ -1,9 +1,12 @@ -export default async function RewriteDestination(props: { searchParams: Promise<{ a: string }> }) { +export default async function RewriteDestination(props: { + searchParams: Promise<{ a: string; multi?: string[] }>; +}) { const searchParams = await props.searchParams; return (
Rewritten Destination
a: {searchParams.a}
+
multi: {searchParams.multi?.join(", ")}
); } diff --git a/examples/e2e/app-pages-router/e2e/middleware.rewrite.test.ts b/examples/e2e/app-pages-router/e2e/middleware.rewrite.test.ts index ba09abd6..a1420927 100644 --- a/examples/e2e/app-pages-router/e2e/middleware.rewrite.test.ts +++ b/examples/e2e/app-pages-router/e2e/middleware.rewrite.test.ts @@ -1,19 +1,42 @@ import { expect, test } from "@playwright/test"; -test("Middleware Rewrite", async ({ page }) => { - await page.goto("/"); - await page.locator('[href="/rewrite"]').click(); +test.describe("Middleware Rewrite", () => { + test("Simple Middleware Rewrite", async ({ page }) => { + await page.goto("/"); + await page.locator('[href="/rewrite"]').click(); - await page.waitForURL("/rewrite"); - let el = page.getByText("Rewritten Destination", { exact: true }); - await expect(el).toBeVisible(); - el = page.getByText("a: b", { exact: true }); - await expect(el).toBeVisible(); - // Loading page should also rewrite - await page.goto("/rewrite"); - await page.waitForURL("/rewrite"); - el = page.getByText("Rewritten Destination", { exact: true }); - await expect(el).toBeVisible(); - el = page.getByText("a: b", { exact: true }); - await expect(el).toBeVisible(); + await page.waitForURL("/rewrite"); + let el = page.getByText("Rewritten Destination", { exact: true }); + await expect(el).toBeVisible(); + el = page.getByText("a: b", { exact: true }); + await expect(el).toBeVisible(); + // Loading page should also rewrite + await page.goto("/rewrite"); + await page.waitForURL("/rewrite"); + el = page.getByText("Rewritten Destination", { exact: true }); + await expect(el).toBeVisible(); + el = page.getByText("a: b", { exact: true }); + await expect(el).toBeVisible(); + }); + + test("Middleware Rewrite with multiple search params", async ({ page }) => { + await page.goto("/rewrite-multi-params"); + let el = page.getByText("Rewritten Destination", { exact: true }); + await expect(el).toBeVisible(); + el = page.getByText("a: b", { exact: true }); + await expect(el).toBeVisible(); + el = page.getByText("multi: 0, 1, 2", { exact: true }); + await expect(el).toBeVisible(); + }); + + test("Middleware Rewrite should override original search params", async ({ page }) => { + await page.goto("/rewrite?a=1&multi=3"); + let el = page.getByText("Rewritten Destination", { exact: true }); + await expect(el).toBeVisible(); + el = page.getByText("a: b", { exact: true }); + await expect(el).toBeVisible(); + el = page.getByText("multi:", { exact: true }); + await expect(el).toBeVisible(); + await expect(el).toHaveText("multi:"); + }); }); diff --git a/examples/e2e/app-pages-router/middleware.ts b/examples/e2e/app-pages-router/middleware.ts index 5dcf1414..edc8677a 100644 --- a/examples/e2e/app-pages-router/middleware.ts +++ b/examples/e2e/app-pages-router/middleware.ts @@ -27,6 +27,14 @@ export function middleware(request: NextRequest) { u.searchParams.set("a", "b"); return NextResponse.rewrite(u); } + if (path === "/rewrite-multi-params") { + const u = new URL("/rewrite-destination", `${protocol}://${host}`); + u.searchParams.append("multi", "0"); + u.searchParams.append("multi", "1"); + u.searchParams.append("multi", "2"); + u.searchParams.set("a", "b"); + return NextResponse.rewrite(u); + } if (path === "/api/middleware") { return new NextResponse(JSON.stringify({ hello: "middleware" }), { status: 200, @@ -43,6 +51,19 @@ export function middleware(request: NextRequest) { }, }); } + + if (path === "/head" && request.method === "HEAD") { + return new NextResponse(null, { + headers: { + "x-from-middleware": "true", + }, + }); + } + + if (path === "/fetch") { + // This one test both that we don't modify immutable headers + return fetch(new URL("/api/hello", request.url)); + } const rHeaders = new Headers(request.headers); const r = NextResponse.next({ request: { diff --git a/examples/e2e/app-router/app/cookies/page.tsx b/examples/e2e/app-router/app/cookies/page.tsx new file mode 100644 index 00000000..60ef69a7 --- /dev/null +++ b/examples/e2e/app-router/app/cookies/page.tsx @@ -0,0 +1,7 @@ +import { cookies } from "next/headers"; + +export default async function Page() { + const foo = (await cookies()).get("foo")?.value; + + return
{foo}
; +} diff --git a/examples/e2e/app-router/e2e/middleware.cookies.test.ts b/examples/e2e/app-router/e2e/middleware.cookies.test.ts index 9c92fe60..e610dc8e 100644 --- a/examples/e2e/app-router/e2e/middleware.cookies.test.ts +++ b/examples/e2e/app-router/e2e/middleware.cookies.test.ts @@ -1,12 +1,36 @@ import { expect, test } from "@playwright/test"; -test("Cookies", async ({ page, context }) => { - await page.goto("/"); +test.describe("Middleware Cookies", () => { + test("should be able to set cookies on response in middleware", async ({ page, context }) => { + await page.goto("/"); - const cookies = await context.cookies(); - const from = cookies.find(({ name }) => name === "from"); - expect(from?.value).toEqual("middleware"); + const cookies = await context.cookies(); + const from = cookies.find(({ name }) => name === "from"); + expect(from?.value).toEqual("middleware"); - const love = cookies.find(({ name }) => name === "with"); - expect(love?.value).toEqual("love"); + const love = cookies.find(({ name }) => name === "with"); + expect(love?.value).toEqual("love"); + }); + test("should be able to get cookies set in the middleware with Next's cookies().get()", async ({ + page, + }) => { + await page.goto("/cookies"); + + expect(await page.getByTestId("foo").textContent()).toBe("bar"); + }); + test("should not expose internal Next headers in response", async ({ page, context }) => { + const responsePromise = page.waitForResponse((response) => response.url().includes("/cookies")); + + await page.goto("/cookies"); + + const response = await responsePromise; + const headers = response.headers(); + + const cookies = await context.cookies(); + const fooCookie = cookies.find(({ name }) => name === "foo"); + expect(fooCookie?.value).toBe("bar"); + + expect(headers).not.toHaveProperty("x-middleware-set-cookie"); + expect(headers).not.toHaveProperty("x-middleware-next"); + }); }); diff --git a/examples/e2e/app-router/middleware.ts b/examples/e2e/app-router/middleware.ts index 5a067e3b..bb7e39bf 100644 --- a/examples/e2e/app-router/middleware.ts +++ b/examples/e2e/app-router/middleware.ts @@ -28,6 +28,11 @@ export function middleware(request: NextRequest) { const u = new URL("https://opennext.js.org/share.png"); return NextResponse.rewrite(u); } + if (path === "/cookies") { + const res = NextResponse.next(); + res.cookies.set("foo", "bar"); + return res; + } const requestHeaders = new Headers(request.headers); // Setting the Request Headers, this should be available in RSC requestHeaders.set("request-header", "request-header"); diff --git a/examples/e2e/pages-router/e2e/fallback.test.ts b/examples/e2e/pages-router/e2e/fallback.test.ts new file mode 100755 index 00000000..49da7d10 --- /dev/null +++ b/examples/e2e/pages-router/e2e/fallback.test.ts @@ -0,0 +1,40 @@ +import { expect, test } from "@playwright/test"; + +test.describe("fallback", () => { + test("should work with fully static fallback", async ({ page }) => { + await page.goto("/fallback-intercepted/static/"); + const h1 = page.locator("h1"); + await expect(h1).toHaveText("Static Fallback Page"); + const p = page.getByTestId("message"); + await expect(p).toHaveText("This is a fully static page."); + }); + + test("should work with static fallback", async ({ page }) => { + await page.goto("/fallback-intercepted/ssg/"); + const h1 = page.locator("h1"); + await expect(h1).toHaveText("Static Fallback Page"); + const p = page.getByTestId("message"); + await expect(p).toHaveText("This is a static ssg page."); + }); + + test("should work with fallback intercepted by dynamic route", async ({ page }) => { + await page.goto("/fallback-intercepted/something/"); + const h1 = page.locator("h1"); + await expect(h1).toHaveText("Dynamic Fallback Page"); + const p = page.getByTestId("message"); + await expect(p).toHaveText("This is a dynamic fallback page."); + }); + + test("should work with fallback page pregenerated", async ({ page }) => { + await page.goto("/fallback-intercepted/fallback/"); + const h1 = page.locator("h1"); + await expect(h1).toHaveText("Static Fallback Page"); + const p = page.getByTestId("message"); + await expect(p).toHaveText("This is a static fallback page."); + }); + + test("should 404 on page not pregenerated", async ({ request }) => { + const res = await request.get("/fallback/not-generated"); + expect(res.status()).toBe(404); + }); +}); diff --git a/examples/e2e/pages-router/src/pages/fallback-intercepted/[...slugs].tsx b/examples/e2e/pages-router/src/pages/fallback-intercepted/[...slugs].tsx new file mode 100755 index 00000000..fd8e0a7a --- /dev/null +++ b/examples/e2e/pages-router/src/pages/fallback-intercepted/[...slugs].tsx @@ -0,0 +1,18 @@ +import type { InferGetServerSidePropsType } from "next"; + +export function getServerSideProps() { + return { + props: { + message: "This is a dynamic fallback page.", + }, + }; +} + +export default function Page({ message }: InferGetServerSidePropsType) { + return ( +
+

Dynamic Fallback Page

+

{message}

+
+ ); +} diff --git a/examples/e2e/pages-router/src/pages/fallback-intercepted/[slug].tsx b/examples/e2e/pages-router/src/pages/fallback-intercepted/[slug].tsx new file mode 100755 index 00000000..9653bd4e --- /dev/null +++ b/examples/e2e/pages-router/src/pages/fallback-intercepted/[slug].tsx @@ -0,0 +1,31 @@ +import type { InferGetStaticPropsType } from "next"; + +export function getStaticPaths() { + return { + paths: [ + { + params: { + slug: "fallback", + }, + }, + ], + fallback: false, + }; +} + +export function getStaticProps() { + return { + props: { + message: "This is a static fallback page.", + }, + }; +} + +export default function Page({ message }: InferGetStaticPropsType) { + return ( +
+

Static Fallback Page

+

{message}

+
+ ); +} diff --git a/examples/e2e/pages-router/src/pages/fallback-intercepted/ssg.tsx b/examples/e2e/pages-router/src/pages/fallback-intercepted/ssg.tsx new file mode 100755 index 00000000..7a6d39af --- /dev/null +++ b/examples/e2e/pages-router/src/pages/fallback-intercepted/ssg.tsx @@ -0,0 +1,18 @@ +import type { InferGetStaticPropsType } from "next"; + +export function getStaticProps() { + return { + props: { + message: "This is a static ssg page.", + }, + }; +} + +export default function Page({ message }: InferGetStaticPropsType) { + return ( +
+

Static Fallback Page

+

{message}

+
+ ); +} diff --git a/examples/e2e/pages-router/src/pages/fallback-intercepted/static.tsx b/examples/e2e/pages-router/src/pages/fallback-intercepted/static.tsx new file mode 100755 index 00000000..4c221478 --- /dev/null +++ b/examples/e2e/pages-router/src/pages/fallback-intercepted/static.tsx @@ -0,0 +1,8 @@ +export default function Page() { + return ( +
+

Static Fallback Page

+

This is a fully static page.

+
+ ); +} diff --git a/examples/e2e/pages-router/src/pages/fallback/[slug].tsx b/examples/e2e/pages-router/src/pages/fallback/[slug].tsx new file mode 100755 index 00000000..9653bd4e --- /dev/null +++ b/examples/e2e/pages-router/src/pages/fallback/[slug].tsx @@ -0,0 +1,31 @@ +import type { InferGetStaticPropsType } from "next"; + +export function getStaticPaths() { + return { + paths: [ + { + params: { + slug: "fallback", + }, + }, + ], + fallback: false, + }; +} + +export function getStaticProps() { + return { + props: { + message: "This is a static fallback page.", + }, + }; +} + +export default function Page({ message }: InferGetStaticPropsType) { + return ( +
+

Static Fallback Page

+

{message}

+
+ ); +} diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json index 314b72b5..43c9a8b1 100644 --- a/packages/cloudflare/package.json +++ b/packages/cloudflare/package.json @@ -53,7 +53,7 @@ "homepage": "https://github.com/opennextjs/opennextjs-cloudflare", "dependencies": { "@dotenvx/dotenvx": "catalog:", - "@opennextjs/aws": "https://pkg.pr.new/@opennextjs/aws@859", + "@opennextjs/aws": "^3.6.1", "enquirer": "^2.4.1", "glob": "catalog:", "ts-tqdm": "^0.8.6" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 720b2f3c..ae7374b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1035,8 +1035,8 @@ importers: specifier: 'catalog:' version: 1.31.0 '@opennextjs/aws': - specifier: https://pkg.pr.new/@opennextjs/aws@859 - version: https://pkg.pr.new/@opennextjs/aws@859 + specifier: ^3.6.1 + version: 3.6.1 enquirer: specifier: ^2.4.1 version: 2.4.1 @@ -4035,9 +4035,8 @@ packages: '@octokit/types@13.10.0': resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} - '@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@859': - resolution: {tarball: https://pkg.pr.new/@opennextjs/aws@859} - version: 3.6.0 + '@opennextjs/aws@3.6.1': + resolution: {integrity: sha512-RYU9K58vEUPXqc3pZO6kr9vBy1MmJZFQZLe0oXBskC005oGju/m4e3DCCP4eZ/Q/HdYQXCoqNXgSGi8VCAYgew==} hasBin: true '@opentelemetry/api@1.9.0': @@ -9672,13 +9671,13 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.775.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.775.0 tslib: 2.8.1 '@aws-crypto/ie11-detection@3.0.0': @@ -9743,7 +9742,7 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.734.0 + '@aws-sdk/types': 3.775.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -10157,7 +10156,7 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.723.0 '@aws-sdk/util-user-agent-node': 3.726.0 '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.1.0 + '@smithy/core': 3.3.0 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 @@ -10177,8 +10176,8 @@ snapshots: '@smithy/util-body-length-node': 4.0.0 '@smithy/util-defaults-mode-browser': 4.0.9 '@smithy/util-defaults-mode-node': 4.0.9 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 @@ -10336,7 +10335,7 @@ snapshots: '@smithy/node-config-provider': 4.0.2 '@smithy/property-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.0.1 + '@smithy/signature-v4': 5.1.0 '@smithy/smithy-client': 4.2.1 '@smithy/types': 4.2.0 '@smithy/util-middleware': 4.0.2 @@ -10369,7 +10368,7 @@ snapshots: '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@aws-sdk/credential-provider-env@3.799.0': @@ -10384,13 +10383,13 @@ snapshots: dependencies: '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/node-http-handler': 4.0.1 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 '@smithy/property-provider': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.0 - '@smithy/types': 4.1.0 - '@smithy/util-stream': 4.0.1 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.1 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.799.0': @@ -10434,7 +10433,7 @@ snapshots: '@smithy/credential-provider-imds': 4.0.1 '@smithy/property-provider': 4.0.1 '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' @@ -10524,7 +10523,7 @@ snapshots: '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@aws-sdk/credential-provider-process@3.799.0': @@ -10556,7 +10555,7 @@ snapshots: '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' @@ -10588,7 +10587,7 @@ snapshots: '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@aws-sdk/credential-provider-web-identity@3.799.0': @@ -10778,10 +10777,10 @@ snapshots: '@aws-sdk/util-arn-parser': 3.723.0 '@smithy/core': 3.3.0 '@smithy/node-config-provider': 4.0.2 - '@smithy/protocol-http': 5.0.1 + '@smithy/protocol-http': 5.1.0 '@smithy/signature-v4': 5.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 + '@smithy/smithy-client': 4.2.1 + '@smithy/types': 4.2.0 '@smithy/util-config-provider': 4.0.0 '@smithy/util-middleware': 4.0.2 '@smithy/util-stream': 4.2.0 @@ -11014,8 +11013,8 @@ snapshots: dependencies: '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) '@aws-sdk/types': 3.723.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 tslib: 2.8.1 @@ -13136,7 +13135,7 @@ snapshots: dependencies: '@octokit/openapi-types': 24.2.0 - '@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@859': + '@opennextjs/aws@3.6.1': dependencies: '@ast-grep/napi': 0.35.0 '@aws-sdk/client-cloudfront': 3.398.0 @@ -13317,7 +13316,7 @@ snapshots: '@smithy/abort-controller@4.0.1': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/abort-controller@4.0.2': @@ -13372,8 +13371,8 @@ snapshots: '@smithy/core@3.1.2': dependencies: '@smithy/middleware-serde': 4.0.3 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-middleware': 4.0.1 '@smithy/util-stream': 4.2.0 @@ -13401,10 +13400,10 @@ snapshots: '@smithy/credential-provider-imds@4.0.1': dependencies: - '@smithy/node-config-provider': 4.0.1 + '@smithy/node-config-provider': 4.0.2 '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 tslib: 2.8.1 '@smithy/credential-provider-imds@4.0.2': @@ -13466,7 +13465,7 @@ snapshots: '@smithy/eventstream-serde-universal@4.0.1': dependencies: '@smithy/eventstream-codec': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/eventstream-serde-universal@4.0.2': @@ -13690,7 +13689,7 @@ snapshots: '@smithy/middleware-serde@4.0.2': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/middleware-serde@4.0.3': @@ -13753,9 +13752,9 @@ snapshots: '@smithy/node-http-handler@4.0.2': dependencies: '@smithy/abort-controller': 4.0.1 - '@smithy/protocol-http': 5.0.1 + '@smithy/protocol-http': 5.1.0 '@smithy/querystring-builder': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/node-http-handler@4.0.4': @@ -13773,7 +13772,7 @@ snapshots: '@smithy/property-provider@4.0.1': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/property-provider@4.0.2': @@ -13809,7 +13808,7 @@ snapshots: '@smithy/querystring-builder@4.0.1': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 '@smithy/util-uri-escape': 4.0.0 tslib: 2.8.1 @@ -13826,7 +13825,7 @@ snapshots: '@smithy/querystring-parser@4.0.1': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/querystring-parser@4.0.2': @@ -13840,7 +13839,7 @@ snapshots: '@smithy/service-error-classification@4.0.1': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 '@smithy/service-error-classification@4.0.3': dependencies: @@ -13853,7 +13852,7 @@ snapshots: '@smithy/shared-ini-file-loader@4.0.1': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/shared-ini-file-loader@4.0.2': @@ -13874,8 +13873,8 @@ snapshots: '@smithy/signature-v4@5.0.1': dependencies: '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 '@smithy/util-hex-encoding': 4.0.0 '@smithy/util-middleware': 4.0.1 '@smithy/util-uri-escape': 4.0.0 @@ -14139,9 +14138,9 @@ snapshots: '@smithy/util-stream@4.0.2': dependencies: - '@smithy/fetch-http-handler': 5.0.1 + '@smithy/fetch-http-handler': 5.0.2 '@smithy/node-http-handler': 4.0.4 - '@smithy/types': 4.1.0 + '@smithy/types': 4.2.0 '@smithy/util-base64': 4.0.0 '@smithy/util-buffer-from': 4.0.0 '@smithy/util-hex-encoding': 4.0.0