Skip to content

Commit c4f2e54

Browse files
committed
chore(signature-v4-multi-region): de-async getSigV4a owing to containers
1 parent 9cd37b2 commit c4f2e54

File tree

1 file changed

+36
-12
lines changed

1 file changed

+36
-12
lines changed

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

+36-12
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import {
99
RequestSigningArguments,
1010
} from "@smithy/types";
1111

12-
import { OptionalSigV4aSigner, signatureV4aContainer } from "./signature-v4a-container";
1312
import { OptionalCrtSignerV4, signatureV4CrtContainer } from "./signature-v4-crt-container";
13+
import { OptionalSigV4aSigner, signatureV4aContainer } from "./signature-v4a-container";
1414

1515
/**
1616
* @internal
@@ -39,8 +39,7 @@ export class SignatureV4MultiRegion implements RequestPresigner, RequestSigner {
3939

4040
public async sign(requestToSign: HttpRequest, options: RequestSigningArguments = {}): Promise<HttpRequest> {
4141
if (options.signingRegion === "*") {
42-
const signer = await this.getSigv4aSigner();
43-
return signer.sign(requestToSign, options);
42+
return this.getSigv4aSigner().sign(requestToSign, options);
4443
}
4544
return this.sigv4Signer.sign(requestToSign, options);
4645
}
@@ -54,16 +53,14 @@ export class SignatureV4MultiRegion implements RequestPresigner, RequestSigner {
5453
options: RequestSigningArguments = {}
5554
): Promise<HttpRequest> {
5655
if (options.signingRegion === "*") {
57-
const signer = await this.getSigv4aSigner();
58-
return signer.signWithCredentials(requestToSign, credentials, options);
56+
return this.getSigv4aSigner().signWithCredentials(requestToSign, credentials, options);
5957
}
6058
return this.sigv4Signer.signWithCredentials(requestToSign, credentials, options);
6159
}
6260

6361
public async presign(originalRequest: HttpRequest, options: RequestPresigningArguments = {}): Promise<HttpRequest> {
6462
if (options.signingRegion === "*") {
65-
const signer = await this.getSigv4aSigner();
66-
return signer.presign(originalRequest, options);
63+
return this.getSigv4aSigner().presign(originalRequest, options);
6764
}
6865
return this.sigv4Signer.presign(originalRequest, options);
6966
}
@@ -79,17 +76,44 @@ export class SignatureV4MultiRegion implements RequestPresigner, RequestSigner {
7976
return this.sigv4Signer.presignWithCredentials(originalRequest, credentials, options);
8077
}
8178

82-
private async getSigv4aSigner(): Promise<InstanceType<OptionalCrtSignerV4> | InstanceType<OptionalSigV4aSigner>> {
79+
private getSigv4aSigner(): InstanceType<OptionalCrtSignerV4> | InstanceType<OptionalSigV4aSigner> {
8380
if (!this.sigv4aSigner) {
81+
let CrtSignerV4: OptionalCrtSignerV4 | null = null;
82+
let JsSigV4a: OptionalSigV4aSigner | null = null;
83+
8484
if (signatureV4CrtContainer.CrtSignerV4) {
85-
// CRT implementation
86-
this.sigv4aSigner = new signatureV4CrtContainer.CrtSignerV4({
85+
try {
86+
CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;
87+
if (typeof CrtSignerV4 !== "function") throw new Error();
88+
} catch (e) {
89+
e.message =
90+
`${e.message}\n` +
91+
`Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. \n` +
92+
`You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] ` +
93+
`or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. \n` +
94+
"For more information please go to " +
95+
"https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt";
96+
throw e;
97+
}
98+
99+
this.sigv4aSigner = new CrtSignerV4({
87100
...this.signerOptions,
88101
signingAlgorithm: 1,
89102
});
90103
} else if (signatureV4aContainer.SignatureV4a) {
91-
// SigV4a JS implementation
92-
this.sigv4aSigner = new signatureV4aContainer.SignatureV4a({
104+
try {
105+
JsSigV4a = signatureV4aContainer.SignatureV4a;
106+
if (typeof JsSigV4a !== "function") throw new Error();
107+
} catch (e) {
108+
e.message =
109+
`${e.message}\n` +
110+
`Please check whether you have installed the "@smithy/signature-v4a" package explicitly. \n` +
111+
`You must also register the package by calling [require("@smithy/signature-v4a");] ` +
112+
`or an ESM equivalent such as [import "@smithy/signature-v4a";]. \n`;
113+
throw e;
114+
}
115+
116+
this.sigv4aSigner = new JsSigV4a({
93117
...this.signerOptions,
94118
});
95119
} else {

0 commit comments

Comments
 (0)