hero/interfaces/openrpc.json
2025-07-30 08:36:55 +02:00

438 lines
11 KiB
JSON

{
"openrpc": "1.2.6",
"info": {
"title": "Circle WebSocket Server API",
"version": "0.2.0",
"description": "API for interacting with a Circle's WebSocket server, supporting script execution and comprehensive job management."
},
"methods": [
{
"name": "fetch_nonce",
"summary": "Fetches a nonce for authentication purposes.",
"params": [
{
"name": "pubkey",
"description": "The public key to fetch a nonce for.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "nonceResult",
"description": "The nonce string for authentication.",
"schema": {
"type": "string"
}
}
},
{
"name": "authenticate",
"summary": "Authenticates a user with public key and signature.",
"params": [
{
"name": "pubkey",
"description": "The public key of the user.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "signature",
"description": "The signature for authentication.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "authResult",
"description": "Authentication result.",
"schema": {
"type": "boolean"
}
}
},
{
"name": "whoami",
"summary": "Gets authentication status and user information.",
"params": [],
"result": {
"name": "whoamiResult",
"description": "User authentication information.",
"schema": {
"type": "object",
"additionalProperties": true
}
}
},
{
"name": "play",
"summary": "Executes a Rhai script on the server and returns the result immediately.",
"params": [
{
"name": "script",
"description": "The Rhai script to execute.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "playResult",
"description": "The output from the executed Rhai script.",
"schema": {
"$ref": "#/components/schemas/PlayResult"
}
},
"examples": [
{
"name": "Simple Script Execution",
"params": [
{
"name": "script",
"value": "let x = 10; x * 2"
}
],
"result": {
"name": "playResult",
"value": {
"output": "20"
}
}
}
]
},
{
"name": "create_job",
"summary": "Creates a new job without starting it.",
"params": [
{
"name": "job",
"description": "The job to create.",
"required": true,
"schema": {
"$ref": "#/components/schemas/Job"
}
}
],
"result": {
"name": "createJobResult",
"description": "The ID of the created job.",
"schema": {
"type": "string"
}
}
},
{
"name": "start_job",
"summary": "Starts a previously created job.",
"params": [
{
"name": "job_id",
"description": "The ID of the job to start.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "startJobResult",
"description": "Confirmation that the job was started.",
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"description": "Whether the job was successfully started."
}
},
"required": ["success"]
}
}
},
{
"name": "run_job",
"summary": "Creates and runs a job, returning the result when complete.",
"params": [
{
"name": "script",
"description": "The script content to execute.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "script_type",
"description": "The type of script (HeroScript, RhaiSAL, or RhaiDSL).",
"required": true,
"schema": {
"$ref": "#/components/schemas/ScriptType"
}
},
{
"name": "prerequisites",
"description": "List of job IDs that must complete before this job can run.",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
],
"result": {
"name": "runJobResult",
"description": "The job execution result.",
"schema": {
"type": "string"
}
}
},
{
"name": "get_job_status",
"summary": "Gets the current status of a job.",
"params": [
{
"name": "job_id",
"description": "The ID of the job to check.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "jobStatus",
"description": "The current job status.",
"schema": {
"$ref": "#/components/schemas/JobStatus"
}
}
},
{
"name": "get_job_output",
"summary": "Gets the output of a completed job.",
"params": [
{
"name": "job_id",
"description": "The ID of the job to get output for.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "jobOutput",
"description": "The job output, if available.",
"schema": {
"type": "string"
}
}
},
{
"name": "get_job_logs",
"summary": "Gets the logs of a job.",
"params": [
{
"name": "job_id",
"description": "The ID of the job to get logs for.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "jobLogs",
"description": "The job logs, if available.",
"schema": {
"$ref": "#/components/schemas/JobLogsResult"
}
}
},
{
"name": "list_jobs",
"summary": "Lists all job IDs in the system.",
"params": [],
"result": {
"name": "jobList",
"description": "List of all jobs.",
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Job"
}
}
}
},
{
"name": "stop_job",
"summary": "Stops a running job.",
"params": [
{
"name": "job_id",
"description": "The ID of the job to stop.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "stopJobResult",
"description": "Confirmation that the stop request was sent.",
"schema": {
"type": "null"
}
}
},
{
"name": "delete_job",
"summary": "Deletes a job from the system.",
"params": [
{
"name": "job_id",
"description": "The ID of the job to delete.",
"required": true,
"schema": {
"type": "string"
}
}
],
"result": {
"name": "deleteJobResult",
"description": "Confirmation that the job was deleted.",
"schema": {
"type": "null"
}
}
},
{
"name": "clear_all_jobs",
"summary": "Clears all jobs from the system.",
"params": [],
"result": {
"name": "clearJobsResult",
"description": "Information about the cleared jobs.",
"schema": {
"type": "null"
}
}
}
],
"components": {
"schemas": {
"PlayResult": {
"type": "object",
"properties": {
"output": {
"type": "string",
"description": "The string representation of the Rhai script's evaluation result."
}
},
"required": ["output"]
},
"ScriptType": {
"type": "string",
"enum": ["HeroScript", "RhaiSAL", "RhaiDSL"],
"description": "The type of script to execute."
},
"JobStatus": {
"type": "string",
"enum": ["Dispatched", "WaitingForPrerequisites", "Started", "Error", "Finished"],
"description": "The current status of a job."
},
"Job": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the job."
},
"caller_id": {
"type": "string",
"description": "ID of the caller who created this job."
},
"context_id": {
"type": "string",
"description": "Context ID for the job execution."
},
"script": {
"type": "string",
"description": "The script content to execute."
},
"script_type": {
"$ref": "#/components/schemas/ScriptType"
},
"timeout": {
"type": "integer",
"description": "Timeout in seconds for script execution."
},
"retries": {
"type": "integer",
"description": "Number of retries on script execution failure."
},
"concurrent": {
"type": "boolean",
"description": "Whether to execute script in separate thread."
},
"log_path": {
"type": "string",
"description": "Path to write logs of script execution to."
},
"env_vars": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Environment variables for script execution."
},
"prerequisites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Job IDs that must complete before this job can run."
},
"dependents": {
"type": "array",
"items": {
"type": "string"
},
"description": "Job IDs that depend on this job completing."
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp when the job was created."
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp when the job was last updated."
}
},
"required": ["id", "caller_id", "context_id", "script", "script_type", "timeout", "retries", "concurrent", "env_vars", "prerequisites", "dependents", "created_at", "updated_at"]
},
"JobLogsResult": {
"type": "object",
"properties": {
"logs": {
"type": ["string", "null"],
"description": "The job logs, null if not available."
}
},
"required": ["logs"]
}
}
}
}