161 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # HeroDB JSON-RPC Examples
 | |
| 
 | |
| These examples show full JSON-RPC 2.0 payloads for managing HeroDB via the RPC API (enable with `--enable-rpc`). Methods are named as `hero_<function>`. Params are positional arrays; enum values are strings (e.g., `"Redb"`). Copy-paste into Postman or similar clients.
 | |
| 
 | |
| ## Database Management
 | |
| 
 | |
| ### Create Database
 | |
| Creates a new database with optional per-database encryption key (stored write-only in Admin DB 0).
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 1,
 | |
|   "method": "hero_createDatabase",
 | |
|   "params": [
 | |
|     "Redb",
 | |
|     { "name": null, "storage_path": null, "max_size": null, "redis_version": null },
 | |
|     null
 | |
|   ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| With encryption:
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 2,
 | |
|   "method": "hero_createDatabase",
 | |
|   "params": [
 | |
|     "Sled",
 | |
|     { "name": "secure-db", "storage_path": null, "max_size": null, "redis_version": null },
 | |
|     "my-per-db-encryption-key"
 | |
|   ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### List Databases
 | |
| Returns array of database infos (id, backend, encrypted status, size, etc.).
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 3,
 | |
|   "method": "hero_listDatabases",
 | |
|   "params": []
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Get Database Info
 | |
| Retrieves detailed info for a specific database.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 4,
 | |
|   "method": "hero_getDatabaseInfo",
 | |
|   "params": [1]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Delete Database
 | |
| Removes physical database file; metadata remains in Admin DB 0.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 5,
 | |
|   "method": "hero_deleteDatabase",
 | |
|   "params": [1]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Access Control
 | |
| 
 | |
| ### Add Access Key
 | |
| Adds a hashed access key for private databases. Permissions: `"read"` or `"readwrite"`.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 6,
 | |
|   "method": "hero_addAccessKey",
 | |
|   "params": [2, "my-access-key", "readwrite"]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### List Access Keys
 | |
| Returns array of key hashes, permissions, and creation timestamps.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 7,
 | |
|   "method": "hero_listAccessKeys",
 | |
|   "params": [2]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Delete Access Key
 | |
| Removes key by its SHA-256 hash.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 8,
 | |
|   "method": "hero_deleteAccessKey",
 | |
|   "params": [2, "0123abcd...keyhash..."]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Set Database Public/Private
 | |
| Toggles public access (default true). Private databases require access keys.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 9,
 | |
|   "method": "hero_setDatabasePublic",
 | |
|   "params": [2, false]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Server Info
 | |
| 
 | |
| ### Get Server Stats
 | |
| Returns stats like total databases and uptime.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "jsonrpc": "2.0",
 | |
|   "id": 10,
 | |
|   "method": "hero_getServerStats",
 | |
|   "params": []
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Notes
 | |
| - Per-database encryption keys are write-only; set at creation and used transparently.
 | |
| - Access keys are hashed (SHA-256) for storage; provide plaintext in requests.
 | |
| - Backend options: `"Redb"` (default) or `"Sled"`.
 | |
| - Config object fields (name, storage_path, etc.) are optional and currently ignored but positional.
 | |
| 
 | |
| ## IPC over Unix Socket (non-HTTP)
 | |
| 
 | |
| HeroDB supports JSON-RPC over a Unix Domain Socket using reth-ipc. This transport is not HTTP; messages are JSON-RPC framed with a Content-Length header.
 | |
| 
 | |
| - Enable IPC on startup (adjust the socket path as needed):
 | |
|   - herodb --dir /path/to/data --admin-secret YOUR_SECRET --enable-rpc-ipc --rpc-ipc-path /tmp/herodb.sock
 | |
| 
 | |
| - The same RPC methods are available as over HTTP. Namespace is "hero" (e.g. hero_listDatabases). See the RPC trait in [src/rpc.rs](src/rpc.rs) and CLI flags in [src/main.rs](src/main.rs). The IPC bootstrap is in [src/rpc_server.rs](src/rpc_server.rs).
 | |
| 
 | |
| ### Test via socat (interactive)
 | |
| 
 | |
| 1) Connect to the socket with a small timeout:
 | |
| ```
 | |
| sudo socat -d -d -t 5 - UNIX-CONNECT:/tmp/herodb.sock
 | |
| ```
 | |
| 
 | |
| 2) Paste a framed JSON-RPC request (Content-Length header, then a blank line, then the JSON body). For example to call hero_listDatabases:
 | |
| 
 | |
| {"jsonrpc":"2.0","id":3,"method":"hero_listDatabases","params":[]} |