Files
bun.sh/test/regression/issue/s3-signature-order.test.ts
jarred-sumner-bot 81b4b8ca94 fix(s3): ensure correct alphabetical query parameter order in presigned URLs (#21050)
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: jarred-sumner-bot <220441119+jarred-sumner-bot@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-07-15 16:20:34 -07:00

37 lines
1.1 KiB
TypeScript

import { S3Client } from "bun";
import { expect, test } from "bun:test";
test("S3 presigned URL should have correct query parameter order", () => {
const s3 = new S3Client({
accessKeyId: "test-key",
secretAccessKey: "test-secret",
endpoint: "https://s3.example.com",
bucket: "test-bucket",
});
const url = s3.presign("test-file.txt", {
method: "PUT",
acl: "public-read",
expiresIn: 300,
});
// Parse the URL to get query parameters
const urlObj = new URL(url);
const params = Array.from(urlObj.searchParams.keys());
console.log("Query parameters order:", params);
// Verify alphabetical order (after URL decoding)
const expected = params.slice().sort();
expect(params).toEqual(expected);
// Verify that required AWS SigV4 parameters are present
expect(params).toContain("X-Amz-Algorithm");
expect(params).toContain("X-Amz-Credential");
expect(params).toContain("X-Amz-Date");
expect(params).toContain("X-Amz-Expires");
expect(params).toContain("X-Amz-SignedHeaders");
expect(params).toContain("X-Amz-Signature");
expect(params).toContain("X-Amz-Acl");
});