UNPKG

svix

Version:

Svix webhooks API client and webhook verification library

52 lines (42 loc) 1.46 kB
import { Webhook as StdWh } from "standardwebhooks"; export { WebhookVerificationError } from "standardwebhooks"; export interface WebhookRequiredHeaders { "svix-id": string; "svix-timestamp": string; "svix-signature": string; } export interface WebhookUnbrandedRequiredHeaders { "webhook-id": string; "webhook-timestamp": string; "webhook-signature": string; } export interface WebhookOptions { format?: "raw"; } export class Webhook { private readonly inner: StdWh; constructor(secret: string | Uint8Array, options?: WebhookOptions) { this.inner = new StdWh(secret, options); } public verify( payload: string | Buffer, headers_: | WebhookRequiredHeaders | WebhookUnbrandedRequiredHeaders | Record<string, string> ): unknown { const headers: Record<string, string> = {}; for (const key of Object.keys(headers_)) { headers[key.toLowerCase()] = (headers_ as Record<string, string>)[key]; } headers["webhook-id"] = headers["svix-id"] ?? headers["webhook-id"] ?? ""; headers["webhook-signature"] = headers["svix-signature"] ?? headers["webhook-signature"] ?? ""; headers["webhook-timestamp"] = headers["svix-timestamp"] ?? headers["webhook-timestamp"] ?? ""; return this.inner.verify(payload, headers); } public sign(msgId: string, timestamp: Date, payload: string | Buffer): string { return this.inner.sign(msgId, timestamp, payload); } }