Files
metabuilder/workflow/plugins/python/packagerepo/respond_json/respond_json.py
johndoe6345789 6e2f0c08c0 feat(workflow): add packagerepo and string.sha256 plugins
Created 11 packagerepo-specific workflow plugins:
- auth_verify_jwt - JWT token verification
- auth_check_scopes - Scope-based authorization
- parse_path - URL path parameter extraction (Express-style)
- normalize_entity - Field normalization (trim, lower, unique, sort)
- validate_entity - JSON schema validation
- kv_get/kv_put - RocksDB key-value operations
- blob_put - Filesystem blob storage with SHA-256 hashing
- index_upsert - Index entry management
- respond_json/respond_error - Response formatting

Created string.sha256 plugin:
- Compute SHA256 hash of strings/bytes
- Optional "sha256:" prefix
- Used by packagerepo for content-addressed storage

All plugins follow standard pattern:
- Class extending NodeExecutor
- Factory with create() function
- package.json with metadata
- Access external state via runtime parameter

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-22 15:14:59 +00:00

38 lines
989 B
Python

"""Workflow plugin: format JSON response."""
from typing import Dict, Any
import json
from ...base import NodeExecutor
class RespondJson(NodeExecutor):
"""Format JSON response."""
node_type = "packagerepo.respond_json"
category = "packagerepo"
description = "Format JSON response"
def execute(self, inputs: Dict[str, Any], runtime: Any = None) -> Dict[str, Any]:
"""Format JSON response."""
data = inputs.get("data")
status = inputs.get("status", 200)
headers = inputs.get("headers", {})
# Ensure data is present
if data is None:
data = {}
# Add default Content-Type header
response_headers = {"Content-Type": "application/json"}
response_headers.update(headers)
# Format response
response = {
"status": status,
"headers": response_headers,
"body": json.dumps(data, indent=2),
}
return {"result": response}