REST and Websocket API bridge to AlephZero.
The following are javascript examples you can run from a serverless-webpage.
The default port is 24880
.
In all the examples below, we show all the available options.
The value on the right hand side of an option is the default.
If the value is marked as "..."
, that implies that there is no default and the value is required to be set.
fetch(`http://${api_addr}/api/pub`, {
method: "POST",
body: JSON.stringify({
topic: "...", // required
packet: {
headers: [ // optional
["key", "val"],
...
],
payload: "...", // required
},
request_encoding: "none", // optional, one of "none", "base64"
})
})
.then((r) => { return r.text() })
.then((msg) => { console.assert(msg == "success", msg) })
ws = new WebSocket(`ws://${api_addr}/wsapi/sub`)
ws.onopen = () => {
ws.send(JSON.stringify({
topic: "...", // required
init: "AWAIT_NEW", // optional, one of "OLDEST", "MOST_RECENT", "AWAIT_NEW"
iter: "NEXT", // optional, one of "NEXT", "NEWEST"
response_encoding: "none", // optional, one of "none", "base64"
scheduler: "ON_DRAIN", // optional, one of "IMMEDIATE", "ON_ACK", "ON_DRAIN"
}))
}
ws.onmessage = (evt) => {
... evt.data ...
}
fetch(`http://${api_addr}/api/rpc`, {
method: "POST",
body: JSON.stringify({
topic: "...", // required
packet: {
headers: [ // optional
["key", "val"],
...
],
payload: "...", // required
},
request_encoding: "none", // optional, one of "none", "base64"
response_encoding: "none", // optional, one of "none", "base64"
})
})
.then((r) => { return r.text() })
.then((msg) => { console.log(msg) })
ws = new WebSocket(`ws://${api_addr}/wsapi/prpc`)
ws.onopen = () => {
ws.send(JSON.stringify({
topic: "...", // required
iter: "NEXT", // optional, one of "NEXT", "NEWEST"
request_encoding: "none", // optional, one of "none", "base64"
response_encoding: "none", // optional, one of "none", "base64"
scheduler: "ON_DRAIN", // optional, one of "IMMEDIATE", "ON_ACK", "ON_DRAIN"
}))
}
ws.onmessage = (evt) => {
... evt.data ...
}
ws = new WebSocket(`ws://${api_addr}/wsapi/log`)
ws.onopen = () => {
ws.send(JSON.stringify({
topic: "...", // required
level: "INFO", // optional, one of "DBG", "INFO", "WARN", "ERR", "CRIT"
init: "AWAIT_NEW", // optional, one of "OLDEST", "MOST_RECENT", "AWAIT_NEW"
iter: "NEXT", // optional, one of "NEXT", "NEWEST"
response_encoding: "none", // optional, one of "none", "base64"
scheduler: "ON_DRAIN", // optional, one of "IMMEDIATE", "ON_ACK", "ON_DRAIN"
}))
}
ws.onmessage = (evt) => {
... evt.data ...
}
ws = new WebSocket(`ws://${api_addr}/wsapi/discover`)
ws.onopen = () => {
ws.send(JSON.stringify({
protocol: "...", // required, one of "file", "pubsub", "rpc", "prpc", "log", "cfg"
topic: "**/*", // optional
scheduler: "ON_DRAIN", // optional, one of "IMMEDIATE", "ON_ACK", "ON_DRAIN"
}))
}
ws.onmessage = (evt) => {
... evt.data ...
}
git clone
this repo and run:
make run
Or use a pre-compiled docker image:
docker run \
--rm -it \
--name=a0_api \
--ipc=host \
--pid=host \
-p 24880:24880 \
ghcr.io/alephzero/api:latest