/** * Generate HMAC-SHA256 signature for webhook payload */ export async function generateWebhookSignature( secret: string, payload: string, ): Promise { const encoder = new TextEncoder(); const keyData = encoder.encode(secret); const messageData = encoder.encode(payload); const cryptoKey = await crypto.subtle.importKey( "raw", keyData, { name: "HMAC", hash: "SHA-256" }, false, ["sign"], ); const signature = await crypto.subtle.sign("HMAC", cryptoKey, messageData); const hashArray = Array.from(new Uint8Array(signature)); return hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); }