Skip to content

Commit bce853a

Browse files
authored
feat(signature-v4): update EventSigner signature API to sign (#1016)
1 parent 09a464d commit bce853a

File tree

3 files changed

+35
-55
lines changed

3 files changed

+35
-55
lines changed

Diff for: packages/signature-v4/src/SignatureV4.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ describe("SignatureV4", () => {
608608
});
609609
});
610610

611-
describe("#signEvent", () => {
611+
describe("#sign (event)", () => {
612612
//adopt to Ruby SDK: https://github.com/aws/aws-sdk-ruby/blob/3c47c05aa77bdbb7b803a3ff932b3a89c32276ac/gems/aws-sigv4/spec/signer_spec.rb#L274
613613
it("support event signing", async () => {
614614
const signer = new SignatureV4({
@@ -620,7 +620,7 @@ describe("SignatureV4", () => {
620620
},
621621
sha256: Sha256
622622
});
623-
const eventSignature = await signer.signEvent(
623+
const eventSignature = await signer.sign(
624624
{
625625
headers: Uint8Array.from([
626626
5,

Diff for: packages/signature-v4/src/SignatureV4.ts

+31-48
Original file line numberDiff line numberDiff line change
@@ -189,59 +189,36 @@ export class SignatureV4
189189
return request;
190190
}
191191

192-
public sign(
192+
public async sign(
193193
stringToSign: string,
194194
options?: SigningArguments
195195
): Promise<string>;
196-
public sign(
196+
public async sign(
197+
event: FormattedEvent,
198+
options: EventSigningArguments
199+
): Promise<string>;
200+
public async sign(
197201
requestToSign: HttpRequest,
198202
options?: RequestSigningArguments
199203
): Promise<HttpRequest>;
200-
public async sign<T extends string | HttpRequest>(
201-
toSign: T,
202-
{
203-
signingDate = new Date(),
204-
...options
205-
}: RequestSigningArguments | SigningArguments = {}
206-
): Promise<T> {
207-
const [region, credentials] = await Promise.all([
208-
this.regionProvider(),
209-
this.credentialProvider()
210-
]);
211-
204+
public async sign(toSign: any, options: any): Promise<any> {
212205
if (typeof toSign === "string") {
213-
return this.signString(
214-
toSign,
215-
signingDate,
216-
region,
217-
credentials
218-
) as Promise<T>;
206+
return this.signString(toSign, options);
207+
} else if (toSign.headers && toSign.payload) {
208+
return this.signEvent(toSign, options);
219209
} else {
220-
const {
221-
unsignableHeaders,
222-
signableHeaders
223-
} = options as RequestSigningArguments;
224-
225-
return this.signRequest(
226-
toSign as HttpRequest,
227-
signingDate,
228-
region,
229-
credentials,
230-
unsignableHeaders,
231-
signableHeaders
232-
) as Promise<T>;
210+
return this.signRequest(toSign, options);
233211
}
234212
}
235213

236-
public async signEvent(
214+
private async signEvent(
237215
{ headers, payload }: FormattedEvent,
238-
options: EventSigningArguments
216+
{ signingDate = new Date(), priorSignature }: EventSigningArguments
239217
): Promise<string> {
240-
const [region, credentials] = await Promise.all([
218+
const [region] = await Promise.all([
241219
this.regionProvider(),
242220
this.credentialProvider()
243221
]);
244-
const { signingDate = new Date(), priorSignature } = options;
245222
const { shortDate, longDate } = formatDate(signingDate);
246223
const scope = createScope(shortDate, region, this.service);
247224
const hashedPayload = await getPayloadHash(
@@ -259,15 +236,17 @@ export class SignatureV4
259236
hashedHeaders,
260237
hashedPayload
261238
].join("\n");
262-
return this.signString(stringToSign, signingDate, region, credentials);
239+
return this.signString(stringToSign, { signingDate });
263240
}
264241

265242
private async signString(
266243
stringToSign: string,
267-
signingDate: DateInput,
268-
region: string,
269-
credentials: Credentials
244+
{ signingDate = new Date() }: SigningArguments = {}
270245
): Promise<string> {
246+
const [region, credentials] = await Promise.all([
247+
this.regionProvider(),
248+
this.credentialProvider()
249+
]);
271250
const { shortDate } = formatDate(signingDate);
272251

273252
const hash = new this.sha256(
@@ -278,14 +257,18 @@ export class SignatureV4
278257
}
279258

280259
private async signRequest(
281-
originalRequest: HttpRequest,
282-
signingDate: DateInput,
283-
region: string,
284-
credentials: Credentials,
285-
unsignableHeaders?: Set<string>,
286-
signableHeaders?: Set<string>
260+
requestToSign: HttpRequest,
261+
{
262+
signingDate = new Date(),
263+
signableHeaders,
264+
unsignableHeaders
265+
}: RequestSigningArguments = {}
287266
): Promise<HttpRequest> {
288-
const request = prepareRequest(originalRequest);
267+
const [region, credentials] = await Promise.all([
268+
this.regionProvider(),
269+
this.credentialProvider()
270+
]);
271+
const request = prepareRequest(requestToSign);
289272
const { longDate, shortDate } = formatDate(signingDate);
290273
const scope = createScope(shortDate, region, this.service);
291274

Diff for: packages/types/src/signature.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export interface RequestSigningArguments extends SigningArguments {
3535
signableHeaders?: Set<string>;
3636
}
3737

38-
export interface EventSigningArguments extends RequestSigningArguments {
38+
export interface EventSigningArguments extends SigningArguments {
3939
priorSignature: string;
4040
}
4141

@@ -88,8 +88,5 @@ export interface EventSigner {
8888
/**
8989
* Sign the individual event of the event stream.
9090
*/
91-
signEvent(
92-
event: FormattedEvent,
93-
options: EventSigningArguments
94-
): Promise<string>;
91+
sign(event: FormattedEvent, options: EventSigningArguments): Promise<string>;
9592
}

0 commit comments

Comments
 (0)