-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathwebhooks.ts
More file actions
45 lines (37 loc) · 1.23 KB
/
webhooks.ts
File metadata and controls
45 lines (37 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { deserializeEvent } from '../common/serializers';
import { Event, EventResponse } from '../common/interfaces';
import { SignatureProvider } from '../common/crypto/signature-provider';
import { CryptoProvider } from '../common/crypto/crypto-provider';
export class Webhooks {
private signatureProvider: SignatureProvider;
constructor(cryptoProvider: CryptoProvider) {
this.signatureProvider = new SignatureProvider(cryptoProvider);
}
get verifyHeader() {
return this.signatureProvider.verifyHeader.bind(this.signatureProvider);
}
get computeSignature() {
return this.signatureProvider.computeSignature.bind(this.signatureProvider);
}
get getTimestampAndSignatureHash() {
return this.signatureProvider.getTimestampAndSignatureHash.bind(
this.signatureProvider,
);
}
async constructEvent({
payload,
sigHeader,
secret,
tolerance = 180000,
}: {
payload: Record<string, unknown>;
sigHeader: string;
secret: string;
tolerance?: number;
}): Promise<Event> {
const options = { payload, sigHeader, secret, tolerance };
await this.verifyHeader(options);
const webhookPayload = payload as unknown as EventResponse;
return deserializeEvent(webhookPayload);
}
}