438 lines
11 KiB
JSON
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"]
|
|
}
|
|
}
|
|
}
|
|
} |