Syndicate API changes

This commit is contained in:
Emery Hemingway 2024-03-15 10:25:26 +00:00
parent 8e2845a81f
commit 93a42f9111
8 changed files with 122 additions and 15 deletions

View File

@ -1,3 +1,3 @@
# SimpleX bot actor
A [syndicated actor](https://syndicate-lang.org/) for collecting data from the the [SimpleX](https://simplex.chat/) websocket and reformatting as Syndicate assertions.
A [syndicated actor](https://syndicate-lang.org/) for collecting data from the [SimpleX](https://simplex.chat/) websocket and reformatting it as Syndicate assertions.

View File

@ -1,2 +1,3 @@
include_rules
: lock.json |> !nim_cfg |> | ./<lock>
: |> !nim_lk |> {lockfile}
: {lockfile} |> !nim_cfg |> | ./<lock>

View File

@ -1,5 +1,6 @@
include ../eris-nim/depends.tup
include ../syndicate-nim/depends.tup
NIM = $(DIRENV) $(NIM)
NIM_FLAGS += --path:$(TUP_CWD)/../syndicate-nim/src
NIM_FLAGS += --path:$(TUP_CWD)/../eris-nim/src
NIM_GROUPS += $(TUP_CWD)/<lock>

104
lock.json
View File

@ -1 +1,103 @@
{"depends":[{"method":"fetchzip","path":"/nix/store/v03nzlpdgbfxd2zhcnkfbkq01d5kqxcl-source","rev":"84e0247555e4488594975900401baaf5bbbfb53","sha256":"1pfczsv8kl36qpv543f93d2y2vgz2acckssfap7l51s2x62m6qwx","url":"https://github.com/khchen/hashlib/archive/84e0247555e4488594975900401baaf5bbbfb53.tar.gz","packages":["hashlib"],"srcDir":""},{"method":"fetchzip","path":"/nix/store/008s11kkqscfqxs6g29q77c38pnrlppi-source","rev":"552e51899c82c0c2f4f466382be7d8e22a1da689","sha256":"1j3k0zlh5z02adhfvb7rdqz8fjzc6gri4v3v1fgcv2h2b7vrf0dg","url":"https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/552e51899c82c0c2f4f466382be7d8e22a1da689.tar.gz","ref":"20231005","packages":["syndicate"],"srcDir":"src"},{"method":"fetchzip","path":"/nix/store/vx6ihnickx7d5lwy69i8k7fsjicv33r3-source","rev":"c915accf7d2a36ca1f323e2f02e2df7375e815f1","sha256":"11rlcbs9mvk335ibkbj8fk9aslhmnlaiqhcsjpp5n04k447sr7nx","url":"https://git.syndicate-lang.org/ehmry/preserves-nim/archive/c915accf7d2a36ca1f323e2f02e2df7375e815f1.tar.gz","ref":"20230914","packages":["preserves"],"srcDir":"src"},{"method":"fetchzip","path":"/nix/store/zyr8zwh7vaiycn1s4r8cxwc71f2k5l0h-source","rev":"602c5d20c69c76137201b5d41f788f72afb95aa8","sha256":"1dmdmgb6b9m5f8dyxk781nnd61dsk3hdxqks7idk9ncnpj9fng65","url":"https://github.com/cheatfate/nimcrypto/archive/602c5d20c69c76137201b5d41f788f72afb95aa8.tar.gz","ref":"traditional-api","packages":["nimcrypto"],"srcDir":""},{"method":"fetchzip","path":"/nix/store/ffkxmjmigfs7zhhiiqm0iw2c34smyciy-source","rev":"26d62fdc40feb84c6533956dc11d5ee9ea9b6c09","sha256":"0xpzifjkfp49w76qmaylan8q181bs45anmp46l4bwr3lkrr7bpwh","url":"https://github.com/zevv/npeg/archive/26d62fdc40feb84c6533956dc11d5ee9ea9b6c09.tar.gz","ref":"1.2.1","packages":["npeg"],"srcDir":"src"}]}
{
"depends": [
{
"method": "fetchzip",
"packages": [
"bigints"
],
"path": "/nix/store/jvrm392g8adfsgf36prgwkbyd7vh5jsw-source",
"rev": "86ea14d31eea9275e1408ca34e6bfe9c99989a96",
"sha256": "15pcpmnk1bnw3k8769rjzcpg00nahyrypwbxs88jnwr4aczp99j4",
"srcDir": "src",
"url": "https://github.com/ehmry/nim-bigints/archive/86ea14d31eea9275e1408ca34e6bfe9c99989a96.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"cps"
],
"path": "/nix/store/452hfhasrn3gl6vijfmzs69djl099j0j-source",
"rev": "b7c179f172e3a256a482a9daee3c0815ea423206",
"sha256": "1sn9s7iv83sw1jl5jgi2h7b0xpgsn13f9icp5124jvbp0qkxskx2",
"srcDir": "",
"url": "https://github.com/nim-works/cps/archive/b7c179f172e3a256a482a9daee3c0815ea423206.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"hashlib"
],
"path": "/nix/store/fav82xdbicvlk34nmcbl89zx99lr3mbs-source",
"rev": "f9455d4be988e14e3dc7933eb7cc7d7c4820b7ac",
"sha256": "1sx6j952lj98629qfgr7ds5aipyw9d6lldcnnqs205wpj4pkcjb3",
"srcDir": "",
"url": "https://github.com/ehmry/hashlib/archive/f9455d4be988e14e3dc7933eb7cc7d7c4820b7ac.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"nimcrypto"
],
"path": "/nix/store/jwz8pqbv6rsm8w4fjzdb37r0wzjn5hv0-source",
"rev": "d58da671799c69c0b3208b96c154e13c8b1a9e90",
"sha256": "12dm0gsy10ppga7zf7hpf4adaqjrd9b740n2w926xyazq1njf6k9",
"srcDir": "",
"url": "https://github.com/cheatfate/nimcrypto/archive/d58da671799c69c0b3208b96c154e13c8b1a9e90.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"npeg"
],
"path": "/nix/store/ffkxmjmigfs7zhhiiqm0iw2c34smyciy-source",
"rev": "26d62fdc40feb84c6533956dc11d5ee9ea9b6c09",
"sha256": "0xpzifjkfp49w76qmaylan8q181bs45anmp46l4bwr3lkrr7bpwh",
"srcDir": "src",
"url": "https://github.com/zevv/npeg/archive/26d62fdc40feb84c6533956dc11d5ee9ea9b6c09.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"preserves"
],
"path": "/nix/store/2hy124xgabz134dxj3wji7mp47fdwy3w-source",
"rev": "9ae435a83c6d5028405538af5d24a023af625b6e",
"sha256": "1k7ywcp1a53x2fpc6wc2b0qzb264dkifash0s1wcp66rw3lx15k2",
"srcDir": "src",
"url": "https://git.syndicate-lang.org/ehmry/preserves-nim/archive/9ae435a83c6d5028405538af5d24a023af625b6e.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"stew"
],
"path": "/nix/store/mqg8qzsbcc8xqabq2yzvlhvcyqypk72c-source",
"rev": "3c91b8694e15137a81ec7db37c6c58194ec94a6a",
"sha256": "17lfhfxp5nxvld78xa83p258y80ks5jb4n53152cdr57xk86y07w",
"srcDir": "",
"url": "https://github.com/status-im/nim-stew/archive/3c91b8694e15137a81ec7db37c6c58194ec94a6a.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"syndicate"
],
"path": "/nix/store/yv8nzv7g3nxkz61ylzshs70h754vjq3d-source",
"rev": "b209548f5d15f7391c08fcaec3615ed843f8a410",
"sha256": "0pkypbi42cr01lms5adkl55lyqpniqi4sb1mqnlalr79a70b0vf6",
"srcDir": "src",
"url": "https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/b209548f5d15f7391c08fcaec3615ed843f8a410.tar.gz"
},
{
"method": "fetchzip",
"packages": [
"sys"
],
"path": "/nix/store/syhxsjlsdqfap0hk4qp3s6kayk8cqknd-source",
"rev": "4ef3b624db86e331ba334e705c1aa235d55b05e1",
"sha256": "1q4qgw4an4mmmcbx48l6xk1jig1vc8p9cq9dbx39kpnb0890j32q",
"srcDir": "src",
"url": "https://github.com/ehmry/nim-sys/archive/4ef3b624db86e331ba334e705c1aa235d55b05e1.tar.gz"
}
]
}

View File

@ -1,2 +1,5 @@
{ pkgs ? import <nixpkgs> { } }:
pkgs.nim2Packages.buildNimPackage { name = "dummy"; }
pkgs.buildNimPackage {
name = "dummy";
lockFile = ./lock.json;
}

View File

@ -1,6 +1,6 @@
bin = @["simplex_bot_actor"]
license = "Unlicense"
srcDir = "src"
version = "20231028"
version = "20240315"
requires "nim", "syndicate"
requires "syndicate#b209548f5d15f7391c08fcaec3615ed843f8a410"

View File

@ -4,20 +4,20 @@ import
type
Contact* {.preservesRecord: "contact".} = object
`field0`*: Table[Symbol, Preserve[void]]
`field0`*: Table[Symbol, Value]
Command* {.preservesDictionary.} = object
`cmd`*: string
`corrId`*: string
Chat* {.preservesRecord: "chat".} = object
`field0`*: Table[Symbol, Preserve[void]]
`field0`*: Table[Symbol, Value]
Group* {.preservesRecord: "group".} = object
`field0`*: Table[Symbol, Preserve[void]]
`field0`*: Table[Symbol, Value]
proc `$`*(x: Contact | Command | Chat | Group): string =
`$`(toPreserve(x))
`$`(toPreserves(x))
proc encode*(x: Contact | Command | Chat | Group): seq[byte] =
encode(toPreserve(x))
encode(toPreserves(x))

View File

@ -20,7 +20,7 @@ func step(pr: Assertion; path: varargs[string]): Option[Assertion] =
proc sendCommand(turn: var Turn; ds: Cap; cmd: string) =
## Simplex websocket only accepts command
## strings in the format of the CLI client.
message(turn, ds, initRecord("send", Command(cmd: cmd).toPreserve))
message(turn, ds, initRecord("send", Command(cmd: cmd).toPreserves))
proc `%`(bindings: sink openArray[(string, Pattern)]): Pattern =
## Sugar for creating dictionary patterns.
@ -64,7 +64,7 @@ proc updateContact(turn: var Turn; state: State; id, attrs: Assertion) =
var
attrs = attrs
imagePath = attrs.step("profile", "image").extractImagePath
attrs["image".toSymbol(Cap)] = imagePath.toPreserve(Cap)
attrs["image".toSymbol(Cap)] = imagePath.toPreserves
updateTable(turn, state, state.contacts, id, initRecord("contact", attrs))
proc updateGroup(turn: var Turn; state: State; id, attrs: Assertion) =
@ -72,7 +72,7 @@ proc updateGroup(turn: var Turn; state: State; id, attrs: Assertion) =
var
attrs = attrs
imagePath = attrs.step("groupProfile", "image").extractImagePath
attrs["image".toSymbol(Cap)] = imagePath.toPreserve(Cap)
attrs["image".toSymbol(Cap)] = imagePath.toPreserves
updateTable(turn, state, state.groups, id, initRecord("group", attrs))
proc updateChat(turn: var Turn; state: State; ass: Assertion) =
@ -115,6 +115,6 @@ type BootArgs {.preservesDictionary.} = object
runActor("simplex_bot_actor") do (turn: var Turn, root: Cap):
connectStdio(turn, root)
during(turn, root, ?BootArgs) do (ds: Cap, websocket: Cap):
during(turn, root, ?:BootArgs) do (ds: Cap, websocket: Cap):
let state = State(ds: ds, websocket: websocket)
bootChats(turn, state)