add helper to generate webhook headers (#1543)
This commit is contained in:
@@ -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.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.artifact.models import ArtifactType
|
||||||
from skyvern.forge.sdk.core import skyvern_context
|
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.db.enums import TaskType
|
||||||
from skyvern.forge.sdk.log_artifacts import save_step_logs, save_task_logs
|
from skyvern.forge.sdk.log_artifacts import save_step_logs, save_task_logs
|
||||||
from skyvern.forge.sdk.models import Step, StepStatus
|
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)
|
task_response = await self.build_task_response(task=task, last_step=last_step)
|
||||||
|
|
||||||
# send task_response to the webhook callback url
|
# send task_response to the webhook callback url
|
||||||
timestamp = str(int(datetime.utcnow().timestamp()))
|
|
||||||
payload = task_response.model_dump_json(exclude={"request"})
|
payload = task_response.model_dump_json(exclude={"request"})
|
||||||
signature = generate_skyvern_signature(
|
headers = generate_skyvern_webhook_headers(payload=payload, api_key=api_key)
|
||||||
payload=payload,
|
|
||||||
api_key=api_key,
|
|
||||||
)
|
|
||||||
headers = {
|
|
||||||
"x-skyvern-timestamp": timestamp,
|
|
||||||
"x-skyvern-signature": signature,
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
LOG.info(
|
LOG.info(
|
||||||
"Sending task response to webhook callback url",
|
"Sending task response to webhook callback url",
|
||||||
task_id=task.task_id,
|
task_id=task.task_id,
|
||||||
|
|||||||
@@ -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)
|
hash_obj = hmac.new(api_key.encode("utf-8"), msg=payload.encode("utf-8"), digestmod=hashlib.sha256)
|
||||||
return hash_obj.hexdigest()
|
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",
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
from datetime import datetime
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
@@ -19,7 +18,7 @@ from skyvern.exceptions import (
|
|||||||
from skyvern.forge import app
|
from skyvern.forge import app
|
||||||
from skyvern.forge.sdk.artifact.models import ArtifactType
|
from skyvern.forge.sdk.artifact.models import ArtifactType
|
||||||
from skyvern.forge.sdk.core import skyvern_context
|
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.core.skyvern_context import SkyvernContext
|
||||||
from skyvern.forge.sdk.db.enums import TaskType
|
from skyvern.forge.sdk.db.enums import TaskType
|
||||||
from skyvern.forge.sdk.models import Step, StepStatus
|
from skyvern.forge.sdk.models import Step, StepStatus
|
||||||
@@ -974,17 +973,11 @@ class WorkflowService:
|
|||||||
return
|
return
|
||||||
|
|
||||||
# send webhook to the webhook callback url
|
# send webhook to the webhook callback url
|
||||||
timestamp = str(int(datetime.utcnow().timestamp()))
|
|
||||||
payload = workflow_run_status_response.model_dump_json()
|
payload = workflow_run_status_response.model_dump_json()
|
||||||
signature = generate_skyvern_signature(
|
headers = generate_skyvern_webhook_headers(
|
||||||
payload=payload,
|
payload=payload,
|
||||||
api_key=api_key,
|
api_key=api_key,
|
||||||
)
|
)
|
||||||
headers = {
|
|
||||||
"x-skyvern-timestamp": timestamp,
|
|
||||||
"x-skyvern-signature": signature,
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
LOG.info(
|
LOG.info(
|
||||||
"Sending webhook run status to webhook callback url",
|
"Sending webhook run status to webhook callback url",
|
||||||
workflow_id=workflow_id,
|
workflow_id=workflow_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user