Skip to content

Commit a96c5df

Browse files
kuhesiddsriv
andauthored
fix(signature-v4-multi-region): report available sigv4a dependency (#7113)
* fix(signature-v4-multi-region): report available sigv4a dependency * fix(codegen): check sigv4a available for fallback * chore: typo * test(signature-v4-multi-region): add sigV4aDependency test * fix(codegen): codegen run for sigv4aDependency * test(signature-v4-multi-region): minimal browser deps check --------- Co-authored-by: siddsriv <[email protected]>
1 parent 29a3952 commit a96c5df

File tree

8 files changed

+49
-10
lines changed

8 files changed

+49
-10
lines changed

clients/client-cloudfront-keyvaluestore/src/auth/httpAuthSchemeProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
resolveAwsSdkSigV4AConfig,
1010
resolveAwsSdkSigV4Config,
1111
} from "@aws-sdk/core";
12-
import { signatureV4CrtContainer } from "@aws-sdk/signature-v4-multi-region";
12+
import { SignatureV4MultiRegion } from "@aws-sdk/signature-v4-multi-region";
1313
import { EndpointParameterInstructions, resolveParams } from "@smithy/middleware-endpoint";
1414
import {
1515
EndpointV2,
@@ -248,7 +248,7 @@ const createEndpointRuleSetHttpAuthSchemeProvider = <
248248
const name = s.name.toLowerCase();
249249
return name !== "sigv4a" && name.startsWith("sigv4");
250250
});
251-
if (!signatureV4CrtContainer.CrtSignerV4 && sigv4Present) {
251+
if (SignatureV4MultiRegion.sigv4aDependency() === "none" && sigv4Present) {
252252
// sigv4a -> sigv4 fallback.
253253
continue;
254254
}

clients/client-eventbridge/src/auth/httpAuthSchemeProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
resolveAwsSdkSigV4AConfig,
1010
resolveAwsSdkSigV4Config,
1111
} from "@aws-sdk/core";
12-
import { signatureV4CrtContainer } from "@aws-sdk/signature-v4-multi-region";
12+
import { SignatureV4MultiRegion } from "@aws-sdk/signature-v4-multi-region";
1313
import { EndpointParameterInstructions, resolveParams } from "@smithy/middleware-endpoint";
1414
import {
1515
EndpointV2,
@@ -236,7 +236,7 @@ const createEndpointRuleSetHttpAuthSchemeProvider = <
236236
const name = s.name.toLowerCase();
237237
return name !== "sigv4a" && name.startsWith("sigv4");
238238
});
239-
if (!signatureV4CrtContainer.CrtSignerV4 && sigv4Present) {
239+
if (SignatureV4MultiRegion.sigv4aDependency() === "none" && sigv4Present) {
240240
// sigv4a -> sigv4 fallback.
241241
continue;
242242
}

clients/client-s3/src/auth/httpAuthSchemeProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
resolveAwsSdkSigV4AConfig,
1010
resolveAwsSdkSigV4Config,
1111
} from "@aws-sdk/core";
12-
import { signatureV4CrtContainer } from "@aws-sdk/signature-v4-multi-region";
12+
import { SignatureV4MultiRegion } from "@aws-sdk/signature-v4-multi-region";
1313
import { EndpointParameterInstructions, resolveParams } from "@smithy/middleware-endpoint";
1414
import {
1515
EndpointV2,
@@ -235,7 +235,7 @@ const createEndpointRuleSetHttpAuthSchemeProvider = <
235235
const name = s.name.toLowerCase();
236236
return name !== "sigv4a" && name.startsWith("sigv4");
237237
});
238-
if (!signatureV4CrtContainer.CrtSignerV4 && sigv4Present) {
238+
if (SignatureV4MultiRegion.sigv4aDependency() === "none" && sigv4Present) {
239239
// sigv4a -> sigv4 fallback.
240240
continue;
241241
}

clients/client-sesv2/src/auth/httpAuthSchemeProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
resolveAwsSdkSigV4AConfig,
1010
resolveAwsSdkSigV4Config,
1111
} from "@aws-sdk/core";
12-
import { signatureV4CrtContainer } from "@aws-sdk/signature-v4-multi-region";
12+
import { SignatureV4MultiRegion } from "@aws-sdk/signature-v4-multi-region";
1313
import { EndpointParameterInstructions, resolveParams } from "@smithy/middleware-endpoint";
1414
import {
1515
EndpointV2,
@@ -235,7 +235,7 @@ const createEndpointRuleSetHttpAuthSchemeProvider = <
235235
const name = s.name.toLowerCase();
236236
return name !== "sigv4a" && name.startsWith("sigv4");
237237
});
238-
if (!signatureV4CrtContainer.CrtSignerV4 && sigv4Present) {
238+
if (SignatureV4MultiRegion.sigv4aDependency() === "none" && sigv4Present) {
239239
// sigv4a -> sigv4 fallback.
240240
continue;
241241
}

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/auth/http/integration/AwsSdkCustomizeEndpointRuleSetHttpAuthSchemeProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ interface EndpointRuleSetHttpAuthSchemeProvider<
373373
HttpAuthSchemeParametersT extends HttpAuthSchemeParameters
374374
> extends HttpAuthSchemeProvider<EndpointParametersT & HttpAuthSchemeParametersT> { }""");
375375
w.addDependency(TypeScriptDependency.SMITHY_TYPES);
376-
w.addImport("signatureV4CrtContainer", null, AwsDependency.SIGNATURE_V4_MULTIREGION);
376+
w.addImport("SignatureV4MultiRegion", null, AwsDependency.SIGNATURE_V4_MULTIREGION);
377377
w.addImport("Logger", null, TypeScriptDependency.SMITHY_TYPES);
378378
w.addImport("EndpointV2", null, TypeScriptDependency.SMITHY_TYPES);
379379
w.writeDocs("@internal");
@@ -419,7 +419,7 @@ interface DefaultEndpointResolver<EndpointParametersT extends EndpointParameters
419419
const name = s.name.toLowerCase();
420420
return name !== "sigv4a" && name.startsWith("sigv4");
421421
});
422-
if (!signatureV4CrtContainer.CrtSignerV4 && sigv4Present) {
422+
if (SignatureV4MultiRegion.sigv4aDependency() === "none" && sigv4Present) {
423423
// sigv4a -> sigv4 fallback.
424424
continue;
425425
}

packages/signature-v4-multi-region/src/SignatureV4MultiRegion.browser.spec.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,8 @@ describe("SignatureV4MultiRegion (Browser Bundle SigV4a Test)", () => {
7575
"This scenario is covered in source unit tests."
7676
);
7777
});
78+
79+
it("should correctly identify JS SigV4a implementation in browser environment", () => {
80+
expect(SignatureV4MultiRegion.sigv4aDependency()).toBe("js");
81+
});
7882
});

packages/signature-v4-multi-region/src/SignatureV4MultiRegion.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,32 @@ describe("SignatureV4MultiRegion", () => {
5151
vi.clearAllMocks();
5252
});
5353

54+
describe("sigv4aDependency", () => {
55+
it("should return 'crt' when CrtSignerV4 is available", () => {
56+
signatureV4CrtContainer.CrtSignerV4 = CrtSignerV4 as any;
57+
signatureV4aContainer.SignatureV4a = null;
58+
expect(SignatureV4MultiRegion.sigv4aDependency()).toBe("crt");
59+
});
60+
61+
it("should return 'crt' when CrtSignerV4 and SignatureV4a are available", () => {
62+
signatureV4CrtContainer.CrtSignerV4 = CrtSignerV4 as any;
63+
signatureV4aContainer.SignatureV4a = SignatureV4a as any;
64+
expect(SignatureV4MultiRegion.sigv4aDependency()).toBe("crt");
65+
});
66+
67+
it("should return 'js' when only SignatureV4a is available", () => {
68+
signatureV4CrtContainer.CrtSignerV4 = null;
69+
signatureV4aContainer.SignatureV4a = SignatureV4a as any;
70+
expect(SignatureV4MultiRegion.sigv4aDependency()).toBe("js");
71+
});
72+
73+
it("should return 'none' when neither implementation is available", () => {
74+
signatureV4CrtContainer.CrtSignerV4 = null;
75+
signatureV4aContainer.SignatureV4a = null;
76+
expect(SignatureV4MultiRegion.sigv4aDependency()).toBe("none");
77+
});
78+
});
79+
5480
it("should sign with SigV4 signer", async () => {
5581
const signer = new SignatureV4MultiRegion(params);
5682
await signer.sign(minimalRequest);

packages/signature-v4-multi-region/src/SignatureV4MultiRegion.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ export class SignatureV4MultiRegion implements RequestPresigner, RequestSigner {
3636
private readonly sigv4Signer: SignatureV4S3Express;
3737
private readonly signerOptions: SignatureV4MultiRegionInit;
3838

39+
public static sigv4aDependency(): "none" | "js" | "crt" {
40+
if (typeof signatureV4CrtContainer.CrtSignerV4 === "function") {
41+
return "crt";
42+
} else if (typeof signatureV4aContainer.SignatureV4a === "function") {
43+
return "js";
44+
}
45+
return "none";
46+
}
47+
3948
constructor(options: SignatureV4MultiRegionInit) {
4049
this.sigv4Signer = new SignatureV4S3Express(options);
4150
this.signerOptions = options;

0 commit comments

Comments
 (0)