From bf0c30a160d5fa2a876a11cb9095be5e8c5ca281 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 7 Jun 2024 11:53:22 +0200 Subject: [PATCH] Simplify gatekeeper client-side protocols --- schema-bundle.bin | 4 ++-- schemas/gatekeeper.prs | 23 ++++++++++++++++------- schemas/rpc.prs | 11 +++++++++++ 3 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 schemas/rpc.prs diff --git a/schema-bundle.bin b/schema-bundle.bin index b207960..7d2b721 100644 --- a/schema-bundle.bin +++ b/schema-bundle.bin @@ -1,4 +1,4 @@ -“³bundle·µ³tcp„“³schema·³version°³ definitions·³TcpLocal“³rec“³lit³ tcp-local„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³ TcpRemote“³rec“³lit³ +“³bundle·µ³rpc„“³schema·³version°³ definitions·³Answer“³rec“³lit³a„“³tupleµ“³named³request³any„“³named³response³any„„„„³Result“³orµµ±ok“³rec“³lit³ok„“³tupleµ“³named³value³any„„„„„µ±error“³rec“³lit³error„“³tupleµ“³named³error³any„„„„„„„³Question“³rec“³lit³q„“³tupleµ“³named³request³any„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³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³ 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³ @@ -40,5 +40,5 @@ ByteString RunService“³rec“³lit³ run-service„“³tupleµ“³named³ serviceName³any„„„„³ ServiceState“³rec“³lit³ service-state„“³tupleµ“³named³ serviceName³any„“³named³state“³refµ„³State„„„„„³ ServiceObject“³rec“³lit³service-object„“³tupleµ“³named³ serviceName³any„“³named³object³any„„„„³RequireService“³rec“³lit³require-service„“³tupleµ“³named³ serviceName³any„„„„³RestartService“³rec“³lit³restart-service„“³tupleµ“³named³ serviceName³any„„„„³ServiceDependency“³rec“³lit³ depends-on„“³tupleµ“³named³depender³any„“³named³dependee“³refµ„³ ServiceState„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³protocol„“³schema·³version°³ definitions·³Nop“³lit€„³Oid“³atom³ SignedInteger„³Sync“³rec“³lit³S„“³tupleµ“³named³peer“³embedded“³lit„„„„„„³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³A„“³tupleµ“³named³ assertion“³refµ„³ Assertion„„“³named³handle“³refµ„³Handle„„„„„³Handle“³atom³ SignedInteger„³Packet“³orµµ±Turn“³refµ„³Turn„„µ±Error“³refµ„³Error„„µ± Extension“³refµ„³ Extension„„µ±Nop“³refµ„³Nop„„„„³Message“³rec“³lit³M„“³tupleµ“³named³body“³refµ„³ Assertion„„„„„³Retract“³rec“³lit³R„“³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³ description“³refµ„³ Description„„“³named³target“³embedded³any„„“³named³observer“³refµ„³ BindObserver„„„„„³Step“³rec“³named³stepType“³atom³Symbol„„“³tupleµ“³named³detail³any„„„„³Bound“³orµµ±bound“³rec“³lit³bound„“³tupleµ“³named³pathStep“³refµ„³PathStep„„„„„„µ±Rejected“³refµ„³Rejected„„„„³Route“³rec“³lit³route„“³ tuplePrefixµ“³named³ -transports“³seqof³any„„„“³named³ pathSteps“³seqof“³refµ„³PathStep„„„„„³Resolve“³rec“³lit³resolve„“³tupleµ“³named³step“³refµ„³Step„„“³named³observer“³embedded“³refµ„³Resolved„„„„„„³PathStep“³rec“³named³stepType“³atom³Symbol„„“³tupleµ“³named³detail³any„„„„³Rejected“³rec“³lit³rejected„“³tupleµ“³named³detail³any„„„„³Resolved“³orµµ±accepted“³rec“³lit³accepted„“³tupleµ“³named³responderSession“³embedded³any„„„„„„µ±Rejected“³refµ„³Rejected„„„„³ Description“³rec“³named³stepType“³atom³Symbol„„“³tupleµ“³named³detail³any„„„„³ ResolvePath“³rec“³lit³ resolve-path„“³tupleµ“³named³route“³refµ„³Route„„“³named³addr³any„“³named³control“³embedded“³refµ„³TransportControl„„„“³named³resolved“³refµ„³Resolved„„„„„³ BindObserver“³orµµ±present“³embedded“³refµ„³Bound„„„µ±absent“³lit€„„„„³ForceDisconnect“³rec“³lit³force-disconnect„“³tupleµ„„„³ResolvedPathStep“³rec“³lit³ path-step„“³tupleµ“³named³origin“³embedded“³refµ„³Resolve„„„“³named³pathStep“³refµ„³PathStep„„“³named³resolved“³refµ„³Resolved„„„„„³TransportControl“³refµ„³ForceDisconnect„³TransportConnection“³rec“³lit³connect-transport„“³tupleµ“³named³addr³any„“³named³control“³embedded“³refµ„³TransportControl„„„“³named³resolved“³refµ„³Resolved„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³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·³AnyAtom“³orµµ±bool“³atom³Boolean„„µ±double“³atom³Double„„µ±int“³atom³ SignedInteger„„µ±string“³atom³String„„µ±bytes“³atom³ +transports“³seqof³any„„„“³named³ pathSteps“³seqof“³refµ„³PathStep„„„„„³Resolve“³rec“³lit³resolve„“³tupleµ“³named³step“³refµ„³Step„„“³named³observer“³embedded“³refµ„³Resolved„„„„„„³PathStep“³rec“³named³stepType“³atom³Symbol„„“³tupleµ“³named³detail³any„„„„³Rejected“³rec“³lit³rejected„“³tupleµ“³named³detail³any„„„„³Resolved“³orµµ±accepted“³rec“³lit³accepted„“³tupleµ“³named³responderSession“³embedded³any„„„„„„µ±Rejected“³refµ„³Rejected„„„„³ Description“³rec“³named³stepType“³atom³Symbol„„“³tupleµ“³named³detail³any„„„„³ ResolvePath“³rec“³lit³ resolve-path„“³tupleµ“³named³route“³refµ„³Route„„„„„³ BindObserver“³orµµ±present“³embedded“³refµ„³Bound„„„µ±absent“³lit€„„„„³ ResolvedPath“³rec“³lit³ resolved-path„“³tupleµ“³named³addr³any„“³named³control“³embedded“³refµ„³TransportControl„„„“³named³responderSession“³embedded³any„„„„„³ForceDisconnect“³rec“³lit³force-disconnect„“³tupleµ„„„³ResolvePathStep“³rec“³lit³resolve-path-step„“³tupleµ“³named³origin“³embedded“³refµ„³Resolve„„„“³named³pathStep“³refµ„³PathStep„„„„„³ConnectTransport“³rec“³lit³connect-transport„“³tupleµ“³named³addr³any„„„„³ResolvedPathStep“³embedded³any„³TransportControl“³refµ„³ForceDisconnect„³ConnectedTransport“³rec“³lit³connected-transport„“³tupleµ“³named³addr³any„“³named³control“³embedded“³refµ„³TransportControl„„„“³named³responderSession“³embedded³any„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³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·³AnyAtom“³orµµ±bool“³atom³Boolean„„µ±double“³atom³Double„„µ±int“³atom³ SignedInteger„„µ±string“³atom³String„„µ±bytes“³atom³ ByteString„„µ±symbol“³atom³Symbol„„µ±embedded“³embedded³any„„„„³Pattern“³orµµ±discard“³rec“³lit³_„“³tupleµ„„„„µ±bind“³rec“³lit³bind„“³tupleµ“³named³pattern“³refµ„³Pattern„„„„„„µ±lit“³rec“³lit³lit„“³tupleµ“³named³value“³refµ„³AnyAtom„„„„„„µ±group“³rec“³lit³group„“³tupleµ“³named³type“³refµ„³ GroupType„„“³named³entries“³dictof³any“³refµ„³Pattern„„„„„„„„„³ GroupType“³orµµ±rec“³rec“³lit³rec„“³tupleµ“³named³label³any„„„„„µ±arr“³rec“³lit³arr„“³tupleµ„„„„µ±dict“³rec“³lit³dict„“³tupleµ„„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„„„ \ No newline at end of file diff --git a/schemas/gatekeeper.prs b/schemas/gatekeeper.prs index 9ba662c..ba64c3f 100644 --- a/schemas/gatekeeper.prs +++ b/schemas/gatekeeper.prs @@ -52,14 +52,23 @@ Bound = / Rejected . # --------------------------------------------------------------------------- # Protocol at client-side dataspaces, for resolution utilities -# Assertion. In response to observation of this with appropriate captures/wildcards in `addr` -# and `resolved`, respondent will follow `route.pathSteps` starting from one of the -# `route.transports`, asserting `ResolvePath` with the final `Resolved` as well as the selected -# transport `addr` and a `control` for it. -ResolvePath = . +# The client-side operates using `rpc.Question`s and `rpc.Answer`s. -TransportConnection = . -ResolvedPathStep = . +# Assert `rpc.Question` with `ResolvePath` to request resolution of `Route`. The resolution +# utility will continuously try to satisfy the request, following `route.pathSteps` starting +# from one of the `route.transports`, ultimately asserting `rpc.Answer` with an `rpc.Result` in +# response. If the process completes successfully, the `rpc.Result.ok` will carry a +# `ResolvedPath`. +ResolvePath = . +ResolvedPath = . + +# Assertions. As `ResolvePath`/`ResolvedPath`, but just for an initial transport link setup. +ConnectTransport = . +ConnectedTransport = . + +# Assertions. Like `ResolvePath`/`ResolvedPath`, but for incremental resolution along a route. +ResolvePathStep = . +ResolvedPathStep = #:any . PathStep = < @stepType symbol [@detail any]> . # A `Route` describes a network path that can be followed to reach some target entity. diff --git a/schemas/rpc.prs b/schemas/rpc.prs new file mode 100644 index 0000000..ec839c9 --- /dev/null +++ b/schemas/rpc.prs @@ -0,0 +1,11 @@ +version 1 . +embeddedType EntityRef.Cap . + +# Assertion. Establishes a frame for a request. +Question = . + +# Assertion or message. Responds to a question. +Answer = . + +# Value. Captures a common "ok-or-error" pattern as seen in e.g. Rust. +Result = / .