mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
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>
38 lines
989 B
Python
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}
|