Compare commits
No commits in common. "e0deaf3054165c5869aff6f2835cd23d7fc1a0cd" and "a7b5c69000f9fda3ebc28475acb6663ca796539d" have entirely different histories.
e0deaf3054
...
a7b5c69000
3
Makefile
3
Makefile
|
@ -21,6 +21,3 @@ pull-protocols:
|
||||||
-m 'Merge latest changes from the syndicate-protocols repository' \
|
-m 'Merge latest changes from the syndicate-protocols repository' \
|
||||||
git@git.syndicate-lang.org:syndicate-lang/syndicate-protocols \
|
git@git.syndicate-lang.org:syndicate-lang/syndicate-protocols \
|
||||||
main
|
main
|
||||||
|
|
||||||
chat.bin: chat.prs
|
|
||||||
preserves-schemac .:chat.prs > $@
|
|
||||||
|
|
1
chat.bin
1
chat.bin
|
@ -1 +0,0 @@
|
||||||
´³bundle·µ³chat„´³schema·³version‘³definitions·³Says´³rec´³lit³Says„´³tupleµ´³named³who´³atom³String„„´³named³what´³atom³String„„„„„³Present´³rec´³lit³Present„´³tupleµ´³named³username´³atom³String„„„„„„³embeddedType€„„„„
|
|
6
chat.py
6
chat.py
|
@ -4,11 +4,7 @@ import asyncio
|
||||||
import random
|
import random
|
||||||
import syndicate
|
import syndicate
|
||||||
from syndicate import patterns as P, actor, dataspace, turn
|
from syndicate import patterns as P, actor, dataspace, turn
|
||||||
|
from syndicate.schema import simpleChatProtocol, sturdy
|
||||||
from syndicate.schema import sturdy
|
|
||||||
|
|
||||||
from preserves.schema import load_schema_file
|
|
||||||
simpleChatProtocol = load_schema_file('./chat.bin').chat
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Simple dataspace-server-mediated text chat.',
|
parser = argparse.ArgumentParser(description='Simple dataspace-server-mediated text chat.',
|
||||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||||
|
|
|
@ -1,16 +1,5 @@
|
||||||
´³bundle·µ³tcp„´³schema·³version‘³definitions·³TcpLocal´³rec´³lit³ tcp-local„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³ TcpRemote´³rec´³lit³
|
´³bundle·µ³tcp„´³schema·³version‘³definitions·³TcpLocal´³rec´³lit³ tcp-local„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³ TcpRemote´³rec´³lit³
|
||||||
tcp-remote„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³TcpPeerInfo´³rec´³lit³tcp-peer„´³tupleµ´³named³handle´³embedded³any„„´³named³local´³refµ„³TcpLocal„„´³named³remote´³refµ„³ TcpRemote„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³http„´³schema·³version‘³definitions·³Chunk´³orµµ±string´³atom³String„„µ±bytes´³atom³
|
tcp-remote„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³TcpPeerInfo´³rec´³lit³tcp-peer„´³tupleµ´³named³handle´³embedded³any„„´³named³local´³refµ„³TcpLocal„„´³named³remote´³refµ„³ TcpRemote„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³timer„´³schema·³version‘³definitions·³SetTimer´³rec´³lit³ set-timer„´³tupleµ´³named³label³any„´³named³msecs´³atom³Double„„´³named³kind´³refµ„³ TimerKind„„„„„³ LaterThan´³rec´³lit³
|
||||||
ByteString„„„„³Headers´³dictof´³atom³Symbol„´³atom³String„„³MimeType´³atom³Symbol„³
|
|
||||||
QueryValue´³orµµ±string´³atom³String„„µ±file´³rec´³lit³file„´³tupleµ´³named³filename´³atom³String„„´³named³headers´³refµ„³Headers„„´³named³body´³atom³
|
|
||||||
ByteString„„„„„„„„³HostPattern´³orµµ±host´³atom³String„„µ±any´³lit€„„„„³HttpBinding´³rec´³lit³ http-bind„´³tupleµ´³named³host´³refµ„³HostPattern„„´³named³port´³atom³
SignedInteger„„´³named³method´³refµ„³
MethodPattern„„´³named³path´³refµ„³PathPattern„„´³named³handler´³embedded´³refµ„³HttpRequest„„„„„„³HttpContext´³rec´³lit³request„´³tupleµ´³named³req´³refµ„³HttpRequest„„´³named³res´³embedded´³refµ„³HttpResponse„„„„„„³HttpRequest´³rec´³lit³http-request„´³tupleµ´³named³sequenceNumber´³atom³
SignedInteger„„´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„´³named³method´³atom³Symbol„„´³named³path´³seqof´³atom³String„„„´³named³headers´³refµ„³Headers„„´³named³query´³dictof´³atom³Symbol„´³seqof´³refµ„³
|
|
||||||
QueryValue„„„„´³named³body´³refµ„³RequestBody„„„„„³HttpService´³rec´³lit³http-service„´³tupleµ´³named³host´³refµ„³HostPattern„„´³named³port´³atom³
SignedInteger„„´³named³method´³refµ„³
MethodPattern„„´³named³path´³refµ„³PathPattern„„„„„³PathPattern´³seqof´³refµ„³PathPatternElement„„³RequestBody´³orµµ±present´³atom³
|
|
||||||
ByteString„„µ±absent´³lit€„„„„³HttpListener´³rec´³lit³
http-listener„´³tupleµ´³named³port´³atom³
SignedInteger„„„„„³HttpResponse´³orµµ±status´³rec´³lit³status„´³tupleµ´³named³code´³atom³
SignedInteger„„´³named³message´³atom³String„„„„„„µ±header´³rec´³lit³header„´³tupleµ´³named³name´³atom³Symbol„„´³named³value´³atom³String„„„„„„µ±chunk´³rec´³lit³chunk„´³tupleµ´³named³chunk´³refµ„³Chunk„„„„„„µ±done´³rec´³lit³done„´³tupleµ´³named³chunk´³refµ„³Chunk„„„„„„„„³
MethodPattern´³orµµ±any´³lit€„„µ±specific´³atom³Symbol„„„„³PathPatternElement´³orµµ±label´³atom³String„„µ±wildcard´³lit³_„„µ±rest´³lit³...„„„„„³embeddedType€„„µ³noise„´³schema·³version‘³definitions·³Route´³rec´³lit³route„´³tuplePrefixµ´³named³
|
|
||||||
transports´³seqof³any„„„´³named³steps´³seqof´³refµ„³ RouteStep„„„„„³Accept´³rec´³lit³accept„´³tupleµ´³named³responderSession´³embedded³any„„„„„³Packet´³orµµ±complete´³atom³
|
|
||||||
ByteString„„µ±
|
|
||||||
fragmented´³seqof´³atom³
|
|
||||||
ByteString„„„„„³Connect´³rec´³lit³connect„´³tupleµ´³named³serviceSelector³any„´³named³initiatorSession´³embedded³any„„„„„³ NoiseSpec´³andµ´³dict·³key´³named³key´³atom³
|
|
||||||
ByteString„„³service´³named³service³any„„„´³named³protocol´³refµ„³
NoiseProtocol„„´³named³
preSharedKeys´³refµ„³NoisePreSharedKeys„„„„³ NoiseStep´³rec´³lit³noise„´³tupleµ´³named³spec´³refµ„³ NoiseSpec„„„„„³ RouteStep´³orµµ± NoiseStep´³refµ„³ NoiseStep„„µ±GatekeeperStep´³refµ„³GatekeeperStep„„„„³
NoiseProtocol´³orµµ±present´³dict·³protocol´³named³protocol´³atom³String„„„„„µ±invalid´³dict·³protocol´³named³protocol³any„„„„µ±absent´³dict·„„„„„³GatekeeperStep´³refµ³sturdy„³ SturdyRef„³DefaultProtocol´³lit±!Noise_NK_25519_ChaChaPoly_BLAKE2s„³NoisePreSharedKeys´³orµµ±present´³dict·³
preSharedKeys´³named³
preSharedKeys´³seqof´³atom³
|
|
||||||
ByteString„„„„„„µ±invalid´³dict·³
preSharedKeys´³named³
preSharedKeys³any„„„„µ±absent´³dict·„„„„„„³embeddedType€„„µ³timer„´³schema·³version‘³definitions·³SetTimer´³rec´³lit³ set-timer„´³tupleµ´³named³label³any„´³named³msecs´³atom³Double„„´³named³kind´³refµ„³ TimerKind„„„„„³ LaterThan´³rec´³lit³
|
|
||||||
later-than„´³tupleµ´³named³msecs´³atom³Double„„„„„³ TimerKind´³orµµ±relative´³lit³relative„„µ±absolute´³lit³absolute„„µ±clear´³lit³clear„„„„³TimerExpired´³rec´³lit³
timer-expired„´³tupleµ´³named³label³any„´³named³msecs´³atom³Double„„„„„„³embeddedType€„„µ³trace„´³schema·³version‘³definitions·³Oid³any³Name´³orµµ± anonymous´³rec´³lit³ anonymous„´³tupleµ„„„„µ±named´³rec´³lit³named„´³tupleµ´³named³name³any„„„„„„„³Target´³rec´³lit³entity„´³tupleµ´³named³actor´³refµ„³ActorId„„´³named³facet´³refµ„³FacetId„„´³named³oid´³refµ„³Oid„„„„„³TaskId³any³TurnId³any³ActorId³any³FacetId³any³ TurnCause´³orµµ±turn´³rec´³lit³ caused-by„´³tupleµ´³named³id´³refµ„³TurnId„„„„„„µ±cleanup´³rec´³lit³cleanup„´³tupleµ„„„„µ±linkedTaskRelease´³rec´³lit³linked-task-release„´³tupleµ´³named³id´³refµ„³TaskId„„´³named³reason´³refµ„³LinkedTaskReleaseReason„„„„„„µ±periodicActivation´³rec´³lit³periodic-activation„´³tupleµ´³named³period´³atom³Double„„„„„„µ±delay´³rec´³lit³delay„´³tupleµ´³named³causingTurn´³refµ„³TurnId„„´³named³amount´³atom³Double„„„„„„µ±external´³rec´³lit³external„´³tupleµ´³named³description³any„„„„„„„³ TurnEvent´³orµµ±assert´³rec´³lit³assert„´³tupleµ´³named³ assertion´³refµ„³AssertionDescription„„´³named³handle´³refµ³protocol„³Handle„„„„„„µ±retract´³rec´³lit³retract„´³tupleµ´³named³handle´³refµ³protocol„³Handle„„„„„„µ±message´³rec´³lit³message„´³tupleµ´³named³body´³refµ„³AssertionDescription„„„„„„µ±sync´³rec´³lit³sync„´³tupleµ´³named³peer´³refµ„³Target„„„„„„µ± breakLink´³rec´³lit³
|
later-than„´³tupleµ´³named³msecs´³atom³Double„„„„„³ TimerKind´³orµµ±relative´³lit³relative„„µ±absolute´³lit³absolute„„µ±clear´³lit³clear„„„„³TimerExpired´³rec´³lit³
timer-expired„´³tupleµ´³named³label³any„´³named³msecs´³atom³Double„„„„„„³embeddedType€„„µ³trace„´³schema·³version‘³definitions·³Oid³any³Name´³orµµ± anonymous´³rec´³lit³ anonymous„´³tupleµ„„„„µ±named´³rec´³lit³named„´³tupleµ´³named³name³any„„„„„„„³Target´³rec´³lit³entity„´³tupleµ´³named³actor´³refµ„³ActorId„„´³named³facet´³refµ„³FacetId„„´³named³oid´³refµ„³Oid„„„„„³TaskId³any³TurnId³any³ActorId³any³FacetId³any³ TurnCause´³orµµ±turn´³rec´³lit³ caused-by„´³tupleµ´³named³id´³refµ„³TurnId„„„„„„µ±cleanup´³rec´³lit³cleanup„´³tupleµ„„„„µ±linkedTaskRelease´³rec´³lit³linked-task-release„´³tupleµ´³named³id´³refµ„³TaskId„„´³named³reason´³refµ„³LinkedTaskReleaseReason„„„„„„µ±periodicActivation´³rec´³lit³periodic-activation„´³tupleµ´³named³period´³atom³Double„„„„„„µ±delay´³rec´³lit³delay„´³tupleµ´³named³causingTurn´³refµ„³TurnId„„´³named³amount´³atom³Double„„„„„„µ±external´³rec´³lit³external„´³tupleµ´³named³description³any„„„„„„„³ TurnEvent´³orµµ±assert´³rec´³lit³assert„´³tupleµ´³named³ assertion´³refµ„³AssertionDescription„„´³named³handle´³refµ³protocol„³Handle„„„„„„µ±retract´³rec´³lit³retract„´³tupleµ´³named³handle´³refµ³protocol„³Handle„„„„„„µ±message´³rec´³lit³message„´³tupleµ´³named³body´³refµ„³AssertionDescription„„„„„„µ±sync´³rec´³lit³sync„´³tupleµ´³named³peer´³refµ„³Target„„„„„„µ± breakLink´³rec´³lit³
|
||||||
break-link„´³tupleµ´³named³source´³refµ„³ActorId„„´³named³handle´³refµ³protocol„³Handle„„„„„„„„³
|
break-link„´³tupleµ´³named³source´³refµ„³ActorId„„´³named³handle´³refµ³protocol„³Handle„„„„„„„„³
|
||||||
ExitStatus´³orµµ±ok´³lit³ok„„µ±Error´³refµ³protocol„³Error„„„„³
|
ExitStatus´³orµµ±ok´³lit³ok„„µ±Error´³refµ³protocol„³Error„„„„³
|
||||||
|
@ -31,4 +20,5 @@ RunService
|
||||||
depends-on„´³tupleµ´³named³depender³any„´³named³dependee´³refµ„³ServiceState„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³protocol„´³schema·³version‘³definitions·³Oid´³atom³
SignedInteger„³Sync´³rec´³lit³sync„´³tupleµ´³named³peer´³embedded´³lit<69>„„„„„„³Turn´³seqof´³refµ„³ TurnEvent„„³Error´³rec´³lit³error„´³tupleµ´³named³message´³atom³String„„´³named³detail³any„„„„³Event´³orµµ±Assert´³refµ„³Assert„„µ±Retract´³refµ„³Retract„„µ±Message´³refµ„³Message„„µ±Sync´³refµ„³Sync„„„„³Assert´³rec´³lit³assert„´³tupleµ´³named³ assertion´³refµ„³ Assertion„„´³named³handle´³refµ„³Handle„„„„„³Handle´³atom³
SignedInteger„³Packet´³orµµ±Turn´³refµ„³Turn„„µ±Error´³refµ„³Error„„µ± Extension´³refµ„³ Extension„„„„³Message´³rec´³lit³message„´³tupleµ´³named³body´³refµ„³ Assertion„„„„„³Retract´³rec´³lit³retract„´³tupleµ´³named³handle´³refµ„³Handle„„„„„³ Assertion³any³ Extension´³rec´³named³label³any„´³named³fields´³seqof³any„„„³ TurnEvent´³tupleµ´³named³oid´³refµ„³Oid„„´³named³event´³refµ„³Event„„„„„³embeddedType€„„µ³ dataspace„´³schema·³version‘³definitions·³Observe´³rec´³lit³Observe„´³tupleµ´³named³pattern´³refµ³dataspacePatterns„³Pattern„„´³named³observer´³embedded³any„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³
|
depends-on„´³tupleµ´³named³depender³any„´³named³dependee´³refµ„³ServiceState„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³protocol„´³schema·³version‘³definitions·³Oid´³atom³
SignedInteger„³Sync´³rec´³lit³sync„´³tupleµ´³named³peer´³embedded´³lit<69>„„„„„„³Turn´³seqof´³refµ„³ TurnEvent„„³Error´³rec´³lit³error„´³tupleµ´³named³message´³atom³String„„´³named³detail³any„„„„³Event´³orµµ±Assert´³refµ„³Assert„„µ±Retract´³refµ„³Retract„„µ±Message´³refµ„³Message„„µ±Sync´³refµ„³Sync„„„„³Assert´³rec´³lit³assert„´³tupleµ´³named³ assertion´³refµ„³ Assertion„„´³named³handle´³refµ„³Handle„„„„„³Handle´³atom³
SignedInteger„³Packet´³orµµ±Turn´³refµ„³Turn„„µ±Error´³refµ„³Error„„µ± Extension´³refµ„³ Extension„„„„³Message´³rec´³lit³message„´³tupleµ´³named³body´³refµ„³ Assertion„„„„„³Retract´³rec´³lit³retract„´³tupleµ´³named³handle´³refµ„³Handle„„„„„³ Assertion³any³ Extension´³rec´³named³label³any„´³named³fields´³seqof³any„„„³ TurnEvent´³tupleµ´³named³oid´³refµ„³Oid„„´³named³event´³refµ„³Event„„„„„³embeddedType€„„µ³ dataspace„´³schema·³version‘³definitions·³Observe´³rec´³lit³Observe„´³tupleµ´³named³pattern´³refµ³dataspacePatterns„³Pattern„„´³named³observer´³embedded³any„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³
|
||||||
gatekeeper„´³schema·³version‘³definitions·³Bind´³rec´³lit³bind„´³tupleµ´³named³oid³any„´³named³key´³atom³
|
gatekeeper„´³schema·³version‘³definitions·³Bind´³rec´³lit³bind„´³tupleµ´³named³oid³any„´³named³key´³atom³
|
||||||
ByteString„„´³named³target´³embedded³any„„„„„³Resolve´³rec´³lit³resolve„´³tupleµ´³named³ sturdyref´³refµ³sturdy„³ SturdyRef„„´³named³observer´³embedded´³embedded³any„„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³racketEvent„´³schema·³version‘³definitions·³RacketEvent´³rec´³lit³racket-event„´³tupleµ´³named³source´³embedded³any„„´³named³event´³embedded³any„„„„„„³embeddedType€„„µ³transportAddress„´³schema·³version‘³definitions·³Tcp´³rec´³lit³tcp„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³Unix´³rec´³lit³unix„´³tupleµ´³named³path´³atom³String„„„„„³Stdio´³rec´³lit³stdio„´³tupleµ„„„³ WebSocket´³rec´³lit³ws„´³tupleµ´³named³url´³atom³String„„„„„„³embeddedType€„„µ³dataspacePatterns„´³schema·³version‘³definitions·³DLit´³rec´³lit³lit„´³tupleµ´³named³value´³refµ„³AnyAtom„„„„„³DBind´³rec´³lit³bind„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³AnyAtom´³orµµ±bool´³atom³Boolean„„µ±float´³atom³Float„„µ±double´³atom³Double„„µ±int´³atom³
SignedInteger„„µ±string´³atom³String„„µ±bytes´³atom³
|
ByteString„„´³named³target´³embedded³any„„„„„³Resolve´³rec´³lit³resolve„´³tupleµ´³named³ sturdyref´³refµ³sturdy„³ SturdyRef„„´³named³observer´³embedded´³embedded³any„„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³racketEvent„´³schema·³version‘³definitions·³RacketEvent´³rec´³lit³racket-event„´³tupleµ´³named³source´³embedded³any„„´³named³event´³embedded³any„„„„„„³embeddedType€„„µ³transportAddress„´³schema·³version‘³definitions·³Tcp´³rec´³lit³tcp„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³Unix´³rec´³lit³unix„´³tupleµ´³named³path´³atom³String„„„„„³Stdio´³rec´³lit³stdio„´³tupleµ„„„³ WebSocket´³rec´³lit³ws„´³tupleµ´³named³url´³atom³String„„„„„„³embeddedType€„„µ³dataspacePatterns„´³schema·³version‘³definitions·³DLit´³rec´³lit³lit„´³tupleµ´³named³value´³refµ„³AnyAtom„„„„„³DBind´³rec´³lit³bind„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³AnyAtom´³orµµ±bool´³atom³Boolean„„µ±float´³atom³Float„„µ±double´³atom³Double„„µ±int´³atom³
SignedInteger„„µ±string´³atom³String„„µ±bytes´³atom³
|
||||||
ByteString„„µ±symbol´³atom³Symbol„„µ±embedded´³embedded³any„„„„³Pattern´³orµµ±DDiscard´³refµ„³DDiscard„„µ±DBind´³refµ„³DBind„„µ±DLit´³refµ„³DLit„„µ± DCompound´³refµ„³ DCompound„„„„³DDiscard´³rec´³lit³_„´³tupleµ„„„³ DCompound´³orµµ±rec´³rec´³lit³rec„´³tupleµ´³named³label³any„´³named³fields´³seqof´³refµ„³Pattern„„„„„„„µ±arr´³rec´³lit³arr„´³tupleµ´³named³items´³seqof´³refµ„³Pattern„„„„„„„µ±dict´³rec´³lit³dict„´³tupleµ´³named³entries´³dictof³any´³refµ„³Pattern„„„„„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„„„
|
ByteString„„µ±symbol´³atom³Symbol„„µ±embedded´³embedded³any„„„„³Pattern´³orµµ±DDiscard´³refµ„³DDiscard„„µ±DBind´³refµ„³DBind„„µ±DLit´³refµ„³DLit„„µ± DCompound´³refµ„³ DCompound„„„„³DDiscard´³rec´³lit³_„´³tupleµ„„„³ DCompound´³orµµ±rec´³rec´³lit³rec„´³tupleµ´³named³label³any„´³named³fields´³seqof´³refµ„³Pattern„„„„„„„µ±arr´³rec´³lit³arr„´³tupleµ´³named³items´³seqof´³refµ„³Pattern„„„„„„„µ±dict´³rec´³lit³dict„´³tupleµ´³named³entries´³dictof³any´³refµ„³Pattern„„„„„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³secureChatProtocol„´³schema·³version‘³definitions·³Join´³rec´³lit³
|
||||||
|
joinedUser„´³tupleµ´³named³uid´³refµ„³UserId„„´³named³handle´³embedded´³refµ„³Session„„„„„„³Says´³rec´³lit³says„´³tupleµ´³named³who´³refµ„³UserId„„´³named³what´³atom³String„„„„„³UserId´³atom³
SignedInteger„³Session´³orµµ±observeUsers´³rec´³lit³Observe„´³tupleµ´³lit³user„´³named³observer´³embedded´³refµ„³UserInfo„„„„„„„µ±
observeSpeech´³rec´³lit³Observe„´³tupleµ´³lit³says„´³named³observer´³embedded´³refµ„³Says„„„„„„„µ± NickClaim´³refµ„³ NickClaim„„µ±Says´³refµ„³Says„„„„³UserInfo´³rec´³lit³user„´³tupleµ´³named³uid´³refµ„³UserId„„´³named³name´³atom³String„„„„„³ NickClaim´³rec´³lit³ claimNick„´³tupleµ´³named³uid´³refµ„³UserId„„´³named³name´³atom³String„„´³named³k´³embedded´³refµ„³NickClaimResponse„„„„„„³NickConflict´³rec´³lit³nickConflict„´³tupleµ„„„³NickClaimResponse´³orµµ±true´³lit<69>„„µ±NickConflict´³refµ„³NickConflict„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³simpleChatProtocol„´³schema·³version‘³definitions·³Says´³rec´³lit³Says„´³tupleµ´³named³who´³atom³String„„´³named³what´³atom³String„„„„„³Present´³rec´³lit³Present„´³tupleµ´³named³username´³atom³String„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„„„
|
|
@ -1,51 +0,0 @@
|
||||||
version 1 .
|
|
||||||
|
|
||||||
; Assertion in driver DS
|
|
||||||
; Causes creation of server and route
|
|
||||||
HttpBinding = <http-bind @host HostPattern @port int @method MethodPattern @path PathPattern @handler #!HttpRequest> .
|
|
||||||
|
|
||||||
; Assertion in driver DS
|
|
||||||
; Describes active server and route
|
|
||||||
HttpService = <http-service @host HostPattern @port int @method MethodPattern @path PathPattern> .
|
|
||||||
|
|
||||||
; Assertion in driver DS
|
|
||||||
; Describes active listener
|
|
||||||
HttpListener = <http-listener @port int> .
|
|
||||||
|
|
||||||
HostPattern = @host string / @any #f .
|
|
||||||
PathPattern = [PathPatternElement ...] .
|
|
||||||
PathPatternElement = @label string / @wildcard =_ / @rest =... .
|
|
||||||
|
|
||||||
MethodPattern = @any #f / @specific @"Lowercase" symbol .
|
|
||||||
|
|
||||||
; Assertion in driver DS
|
|
||||||
HttpRequest = <http-request
|
|
||||||
@sequenceNumber int
|
|
||||||
@host string
|
|
||||||
@port int
|
|
||||||
@method @"Lowercase" symbol
|
|
||||||
@path [string ...]
|
|
||||||
@headers Headers
|
|
||||||
@query {symbol: [QueryValue ...] ...:...}
|
|
||||||
@body RequestBody> .
|
|
||||||
|
|
||||||
Headers = {@"Lowercase" symbol: string ...:...} .
|
|
||||||
QueryValue = @string string / <file @filename string @headers Headers @body bytes> .
|
|
||||||
RequestBody = @present bytes / @absent #f .
|
|
||||||
|
|
||||||
; Assertion to handler entity
|
|
||||||
HttpContext = <request @req HttpRequest @res #!HttpResponse> .
|
|
||||||
|
|
||||||
@<TODO "trailers?">
|
|
||||||
; Messages
|
|
||||||
HttpResponse =
|
|
||||||
/ <status @code int @message string>
|
|
||||||
/ <header @name symbol @value string>
|
|
||||||
/ <chunk @chunk Chunk>
|
|
||||||
/ <done @chunk Chunk>
|
|
||||||
.
|
|
||||||
|
|
||||||
Chunk = @string string / @bytes bytes .
|
|
||||||
|
|
||||||
; e.g. text/plain, text/html, application/json
|
|
||||||
MimeType = symbol .
|
|
|
@ -1,66 +0,0 @@
|
||||||
version 1 .
|
|
||||||
|
|
||||||
; https://noiseprotocol.org/
|
|
||||||
|
|
||||||
; Assertion.
|
|
||||||
Connect = <connect @serviceSelector any @initiatorSession #!any> .
|
|
||||||
|
|
||||||
; Assertion (to initiatorSession).
|
|
||||||
Accept = <accept @responderSession #!any> .
|
|
||||||
|
|
||||||
; Sessions proceed by sending Packets to the initiatorSession and responderSession according to
|
|
||||||
; the Noise protocol definition. Each Packet represents a complete logical unit of
|
|
||||||
; communication; for example, a complete Turn when layering the Syndicate protocol over Noise.
|
|
||||||
; Note well the restriction on Noise messages: no individual complete packet or packet fragment
|
|
||||||
; may exceed 65535 bytes (N.B. not 65536!). When `fragmented`, each portion of a Packet is a
|
|
||||||
; complete Noise "transport message"; when `complete`, the whole thing is likewise a complete
|
|
||||||
; "transport message".
|
|
||||||
Packet = @complete bytes / @fragmented [bytes ...] .
|
|
||||||
|
|
||||||
; When layering Syndicate protocol over noise,
|
|
||||||
;
|
|
||||||
; - the canonical encoding of the serviceSelector is the prologue
|
|
||||||
; - protocol.Packets MUST be encoded using the machine-oriented Preserves syntax
|
|
||||||
; - zero or more Turns are permitted per noise.Packet
|
|
||||||
; - each Turn must fit inside a single noise.Packet (fragment if needed)
|
|
||||||
; - payloads inside a noise.Packet may be padded at the end with byte 0x80 (128), which
|
|
||||||
; encodes `#f` in the machine-oriented Preserves syntax.
|
|
||||||
;
|
|
||||||
; In summary, each noise.Packet, once (reassembled and) decrypted, will be a sequence of zero
|
|
||||||
; or more machine-encoded protocol.Packets, followed by zero or more 0x80 bytes.
|
|
||||||
|
|
||||||
; A `Route` describes a network path that can be followed to reach some target entity.
|
|
||||||
;
|
|
||||||
; It starts with zero or more possible non-Syndicate `transports`, in preference order. These
|
|
||||||
; could be `transportAddress.Tcp` values or similar. They are just suggestions; it's quite
|
|
||||||
; possible the endpoint is reachable by some means not listed. The network outside Syndicate
|
|
||||||
; is, after all, pretty diverse! In particular, *zero* `transports` may be provided, in which
|
|
||||||
; case some out-of-band means has to be used to make that first connection.
|
|
||||||
;
|
|
||||||
; The `transports` give instructions for contacting the first entity in the `Route` path. Often
|
|
||||||
; this will be a `gatekeeper`, or a `noise` protocol endpoint, or both. Occasionally, it may
|
|
||||||
; even be the desired target entity. Subsequent `steps` describe how to proceed from the
|
|
||||||
; initial entity to the target.
|
|
||||||
Route = <route @transports [any ...] @steps RouteStep ...> .
|
|
||||||
RouteStep = NoiseStep / GatekeeperStep .
|
|
||||||
|
|
||||||
GatekeeperStep = sturdy.SturdyRef .
|
|
||||||
|
|
||||||
NoiseStep = <noise @spec NoiseSpec> .
|
|
||||||
NoiseSpec = {
|
|
||||||
; The `serviceSelector` to use in a `Connect`.
|
|
||||||
service: any,
|
|
||||||
; The responder's static public key. If not required (uncommon!), supply the empty ByteString.
|
|
||||||
key: bytes,
|
|
||||||
}
|
|
||||||
& @protocol NoiseProtocol
|
|
||||||
& @preSharedKeys NoisePreSharedKeys
|
|
||||||
.
|
|
||||||
|
|
||||||
; If absent, a default of DefaultProtocol is used. Most services will speak the default.
|
|
||||||
NoiseProtocol = @present { protocol: string } / @invalid { protocol: any } / @absent {} .
|
|
||||||
DefaultProtocol = "Noise_NK_25519_ChaChaPoly_BLAKE2s" .
|
|
||||||
|
|
||||||
; If present, Noise pre-shared-keys (PSKs) are drawn from the sequence as required; if the
|
|
||||||
; sequence is exhausted or not supplied, an all-zeros key is used each time a PSK is needed.
|
|
||||||
NoisePreSharedKeys = @present { preSharedKeys: [bytes ...] } / @invalid { preSharedKeys: any } / @absent {} .
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
version 1 .
|
||||||
|
embeddedType EntityRef.Cap .
|
||||||
|
|
||||||
|
UserId = int .
|
||||||
|
|
||||||
|
Join = <joinedUser @uid UserId @handle #!Session>.
|
||||||
|
|
||||||
|
Session = @observeUsers <Observe =user @observer #!UserInfo>
|
||||||
|
/ @observeSpeech <Observe =says @observer #!Says>
|
||||||
|
/ NickClaim
|
||||||
|
/ Says
|
||||||
|
.
|
||||||
|
|
||||||
|
NickClaim = <claimNick @uid UserId @name string @k #!NickClaimResponse>.
|
||||||
|
NickClaimResponse = #t / NickConflict .
|
||||||
|
|
||||||
|
UserInfo = <user @uid UserId @name string>.
|
||||||
|
|
||||||
|
Says = <says @who UserId @what string>.
|
||||||
|
|
||||||
|
NickConflict = <nickConflict>.
|
|
@ -1,4 +1,5 @@
|
||||||
version 1 .
|
version 1 .
|
||||||
|
embeddedType EntityRef.Cap .
|
||||||
|
|
||||||
Present = <Present @username string>.
|
Present = <Present @username string>.
|
||||||
Says = <Says @who string @what string>.
|
Says = <Says @who string @what string>.
|
Loading…
Reference in New Issue