From 8452d5811ed20c8e5a54da8c6ea3440f81de507a Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 6 Jun 2024 10:42:38 +0300 Subject: [PATCH] http-driver: update from syndicate-nim --- config.prs | 14 +----------- sbom.json | 14 ++++++------ src/schema/config.nim | 40 +++++++++------------------------- src/syndesizer/http_driver.nim | 37 ++++++++++++++++++++----------- 4 files changed, 42 insertions(+), 63 deletions(-) diff --git a/config.prs b/config.prs index 9922c1a..6e840b8 100644 --- a/config.prs +++ b/config.prs @@ -28,9 +28,7 @@ HttpClientArguments = . -HttpDriverArguments = . +HttpDriverStep= . JsonSocketTranslatorStep = . -WebhooksArguments = . - -WebsocketArguments = . - XmlTranslatorArguments = . diff --git a/sbom.json b/sbom.json index 917db74..7e381df 100644 --- a/sbom.json +++ b/sbom.json @@ -7,7 +7,7 @@ "bom-ref": "pkg:nim/syndicate_utils", "name": "syndicate_utils", "description": "Utilites for Syndicated Actors and Synit", - "version": "20240604", + "version": "20240606", "authors": [ { "name": "Emery Hemingway" @@ -89,7 +89,7 @@ "type": "library", "bom-ref": "pkg:nim/syndicate", "name": "syndicate", - "version": "20240601", + "version": "20240605", "externalReferences": [ { "url": "https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/3a4dc1f13392830b587138199643d30fdbec8541.tar.gz", @@ -107,23 +107,23 @@ }, { "name": "nix:fod:path", - "value": "/nix/store/4a52kd569bvwl24j8acz0s0kc1l4aywi-source" + "value": "/nix/store/s2k08r94gs3a6q6ybx3sk5rad78r7vcp-source" }, { "name": "nix:fod:rev", - "value": "3a8e729e89df71063c186e28598b8a4ea9327028" + "value": "24364187f22d8b09bccc645bfafe3a116f69f020" }, { "name": "nix:fod:sha256", - "value": "1imvx7dbncvsxkvl753xadw4zj63nb0y9w26km8i6n8qfaqb0cby" + "value": "0150micmbv7ssh1n7361vjapylqnamfy57mlvxh761gnbighs7nr" }, { "name": "nix:fod:url", - "value": "https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/3a8e729e89df71063c186e28598b8a4ea9327028.tar.gz" + "value": "https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/24364187f22d8b09bccc645bfafe3a116f69f020.tar.gz" }, { "name": "nix:fod:ref", - "value": "20240601" + "value": "20240605" }, { "name": "nix:fod:srcDir", diff --git a/src/schema/config.nim b/src/schema/config.nim index 4e78e10..ae83c0a 100644 --- a/src/schema/config.nim +++ b/src/schema/config.nim @@ -1,15 +1,8 @@ import - preserves, std/tables + preserves type - WebsocketArgumentsField0* {.preservesDictionary.} = object - `dataspace`* {.preservesEmbedded.}: EmbeddedRef - `url`*: string - - WebsocketArguments* {.preservesRecord: "websocket".} = object - `field0`*: WebsocketArgumentsField0 - HttpClientArgumentsField0* {.preservesDictionary.} = object `dataspace`* {.preservesEmbedded.}: EmbeddedRef @@ -52,31 +45,23 @@ type XsltArguments* {.preservesRecord: "xslt".} = object `field0`*: XsltArgumentsField0 - HttpDriverArgumentsField0* {.preservesDictionary.} = object - `dataspace`* {.preservesEmbedded.}: EmbeddedRef - - HttpDriverArguments* {.preservesRecord: "http-driver".} = object - `field0`*: HttpDriverArgumentsField0 - JsonSocketTranslatorStepField0* {.preservesDictionary.} = object `socket`*: SocketAddress JsonSocketTranslatorStep* {.preservesRecord: "json-socket-translator".} = object `field0`*: JsonSocketTranslatorStepField0 - WebhooksArgumentsField0* {.preservesDictionary.} = object - `endpoints`*: Table[seq[string], EmbeddedRef] - `listen`*: Tcp - - WebhooksArguments* {.preservesRecord: "webhooks".} = object - `field0`*: WebhooksArgumentsField0 - FileSystemUsageArgumentsField0* {.preservesDictionary.} = object `dataspace`* {.preservesEmbedded.}: EmbeddedRef FileSystemUsageArguments* {.preservesRecord: "file-system-usage".} = object `field0`*: FileSystemUsageArgumentsField0 + HttpDriverStepField0* {.preservesDictionary.} = object + + HttpDriverStep* {.preservesRecord: "http-driver".} = object + `field0`*: HttpDriverStepField0 + PostgreStepField0* {.preservesDictionary.} = object `connection`*: seq[PostgreConnectionParameter] @@ -122,15 +107,13 @@ type PrinterStep* {.preservesRecord: "printer".} = object `field0`*: PrinterStepField0 -proc `$`*(x: WebsocketArguments | HttpClientArguments | JsonTranslatorArguments | - SocketAddress | +proc `$`*(x: HttpClientArguments | JsonTranslatorArguments | SocketAddress | Base64DecoderArguments | SqliteStep | XsltArguments | - HttpDriverArguments | JsonSocketTranslatorStep | - WebhooksArguments | FileSystemUsageArguments | + HttpDriverStep | PostgreStep | TcpAddress | CacheArguments | @@ -142,16 +125,13 @@ proc `$`*(x: WebsocketArguments | HttpClientArguments | JsonTranslatorArguments PrinterStep): string = `$`(toPreserves(x)) -proc encode*(x: WebsocketArguments | HttpClientArguments | - JsonTranslatorArguments | - SocketAddress | +proc encode*(x: HttpClientArguments | JsonTranslatorArguments | SocketAddress | Base64DecoderArguments | SqliteStep | XsltArguments | - HttpDriverArguments | JsonSocketTranslatorStep | - WebhooksArguments | FileSystemUsageArguments | + HttpDriverStep | PostgreStep | TcpAddress | CacheArguments | diff --git a/src/syndesizer/http_driver.nim b/src/syndesizer/http_driver.nim index 700ac83..c6c2898 100644 --- a/src/syndesizer/http_driver.nim +++ b/src/syndesizer/http_driver.nim @@ -3,15 +3,26 @@ ## Thin wrapper over `syndicate/drivers/http_driver`. -import pkg/preserves, pkg/syndicate -import pkg/syndicate/drivers/http_driver -import pkg/taps -import ../schema/config +import + pkg/taps, + pkg/preserves, + pkg/syndicate, + pkg/syndicate/drivers/http_driver, + pkg/syndicate/protocols/[gatekeeper, sturdy], + ../schema/config -proc spawnHttpDriver*(turn: Turn; ds: Cap): Actor {.discardable.}= - http_driver.spawnHttpDriver(turn, ds) - during(turn, ds, ?:HttpDriverArguments) do (ds: Cap): - http_driver.spawnHttpDriver(turn, ds) +proc spawnHttpDriver*(turn: Turn; relay: Cap): Actor {.discardable.} = + ## Create a dataspace for the driver and to the gatekeeper dance. + spawnActor(turn, "http-driver") do (turn: Turn): + let pat = Resolve?:{ 0: HttpDriverStep.dropType } + during(turn, relay, pat): + let ds = turn.newDataspace() + http_driver.spawnHttpDriver(turn, ds) + # Spawn a shared driver. + let pat = Resolve?:{ 0: HttpDriverStep.dropType, 1: grab() } + during(turn, relay, pat) do (obs: Cap): + discard publish(turn, obs, ResolvedAccepted(responderSession: ds)) + # Pass the shared driver dataspace. when isMainModule: import syndicate/relays @@ -31,12 +42,12 @@ when isMainModule: quit("failed to parse command line for route to Syndicate gatekeeper") runActor("main") do (turn: Turn): - let ds = newDataspace(turn) - spawnRelays(turn, ds) - resolve(turn, ds, envRoute(), spawnHttpDriver) + let relay = newDataspace(turn) + spawnRelays(turn, relay) + resolve(turn, relay, envRoute(), spawnHttpDriver) else: runActor("main") do (turn: Turn): - resolveEnvironment(turn) do (turn: Turn; ds: Cap): - spawnHttpDriver(turn, ds) + resolveEnvironment(turn) do (turn: Turn; relay: Cap): + spawnHttpDriver(turn, relay)