add helper to generate webhook headers (#1543)

This commit is contained in:
Shuchang Zheng
2025-01-13 19:28:14 -08:00
committed by GitHub
parent 52392fa753
commit a798757541
3 changed files with 14 additions and 20 deletions

View File

@@ -47,7 +47,7 @@ from skyvern.forge.prompts import prompt_engine
from skyvern.forge.sdk.api.files import get_path_for_workflow_download_directory, list_files_in_directory, rename_file
from skyvern.forge.sdk.artifact.models import ArtifactType
from skyvern.forge.sdk.core import skyvern_context
from skyvern.forge.sdk.core.security import generate_skyvern_signature
from skyvern.forge.sdk.core.security import generate_skyvern_webhook_headers
from skyvern.forge.sdk.db.enums import TaskType
from skyvern.forge.sdk.log_artifacts import save_step_logs, save_task_logs
from skyvern.forge.sdk.models import Step, StepStatus
@@ -1603,17 +1603,8 @@ class ForgeAgent:
task_response = await self.build_task_response(task=task, last_step=last_step)
# send task_response to the webhook callback url
timestamp = str(int(datetime.utcnow().timestamp()))
payload = task_response.model_dump_json(exclude={"request"})
signature = generate_skyvern_signature(
payload=payload,
api_key=api_key,
)
headers = {
"x-skyvern-timestamp": timestamp,
"x-skyvern-signature": signature,
"Content-Type": "application/json",
}
headers = generate_skyvern_webhook_headers(payload=payload, api_key=api_key)
LOG.info(
"Sending task response to webhook callback url",
task_id=task.task_id,

View File

@@ -41,3 +41,13 @@ def generate_skyvern_signature(
"""
hash_obj = hmac.new(api_key.encode("utf-8"), msg=payload.encode("utf-8"), digestmod=hashlib.sha256)
return hash_obj.hexdigest()
def generate_skyvern_webhook_headers(payload: str, api_key: str) -> dict[str, str]:
signature = generate_skyvern_signature(payload=payload, api_key=api_key)
timestamp = str(int(datetime.utcnow().timestamp()))
return {
"x-skyvern-timestamp": timestamp,
"x-skyvern-signature": signature,
"Content-Type": "application/json",
}

View File

@@ -1,6 +1,5 @@
import asyncio
import json
from datetime import datetime
from typing import Any
import httpx
@@ -19,7 +18,7 @@ from skyvern.exceptions import (
from skyvern.forge import app
from skyvern.forge.sdk.artifact.models import ArtifactType
from skyvern.forge.sdk.core import skyvern_context
from skyvern.forge.sdk.core.security import generate_skyvern_signature
from skyvern.forge.sdk.core.security import generate_skyvern_webhook_headers
from skyvern.forge.sdk.core.skyvern_context import SkyvernContext
from skyvern.forge.sdk.db.enums import TaskType
from skyvern.forge.sdk.models import Step, StepStatus
@@ -974,17 +973,11 @@ class WorkflowService:
return
# send webhook to the webhook callback url
timestamp = str(int(datetime.utcnow().timestamp()))
payload = workflow_run_status_response.model_dump_json()
signature = generate_skyvern_signature(
headers = generate_skyvern_webhook_headers(
payload=payload,
api_key=api_key,
)
headers = {
"x-skyvern-timestamp": timestamp,
"x-skyvern-signature": signature,
"Content-Type": "application/json",
}
LOG.info(
"Sending webhook run status to webhook callback url",
workflow_id=workflow_id,