diff --git a/packages/core/protocols/schema-bundle.bin b/packages/core/protocols/schema-bundle.bin index 0f38f12..cfe864b 100644 Binary files a/packages/core/protocols/schema-bundle.bin and b/packages/core/protocols/schema-bundle.bin differ diff --git a/packages/core/protocols/schemas/http.prs b/packages/core/protocols/schemas/http.prs new file mode 100644 index 0000000..a9069bc --- /dev/null +++ b/packages/core/protocols/schemas/http.prs @@ -0,0 +1,51 @@ +version 1 . + +; Assertion in driver DS +; Causes creation of server and route +HttpBinding = . + +; Assertion in driver DS +; Describes active server and route +HttpService = . + +; Assertion in driver DS +; Describes active listener +HttpListener = . + +HostPattern = @host string / @any #f . +PathPattern = [PathPatternElement ...] . +PathPatternElement = @label string / @wildcard =_ / @rest =... . + +MethodPattern = @any #f / @specific @"Lowercase" symbol . + +; Assertion in driver DS +HttpRequest = . + +Headers = {@"Lowercase" symbol: string ...:...} . +QueryValue = @string string / . +RequestBody = @present bytes / @absent #f . + +; Assertion to handler entity +HttpContext = . + +@ +; Messages +HttpResponse = +/ +/
+/ +/ +. + +Chunk = @string string / @bytes bytes . + +; e.g. text/plain, text/html, application/json +MimeType = symbol . diff --git a/packages/core/protocols/schemas/noise.prs b/packages/core/protocols/schemas/noise.prs new file mode 100644 index 0000000..f14031e --- /dev/null +++ b/packages/core/protocols/schemas/noise.prs @@ -0,0 +1,66 @@ +version 1 . + +; https://noiseprotocol.org/ + +; Assertion. +Connect = . + +; Assertion (to initiatorSession). +Accept = . + +; 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 = . +RouteStep = NoiseStep / GatekeeperStep . + +GatekeeperStep = sturdy.SturdyRef . + +NoiseStep = . +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 {} .