syndesizer: absorb json_translator
This commit is contained in:
parent
7ed62e0482
commit
eeaa80db88
27
README.md
27
README.md
|
@ -80,6 +80,29 @@ $mpvSpace [
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### JSON Stdio Translator
|
||||||
|
|
||||||
|
Executes a command, parses its JSON output, converts to record `<recv @jsonData any>`, and publishes and messages it to a dataspace.
|
||||||
|
|
||||||
|
```
|
||||||
|
# Configuration example
|
||||||
|
<require-service <daemon syndesizer>>
|
||||||
|
|
||||||
|
let ?ds = dataspace
|
||||||
|
<bind <ref {oid: "syndicate" key: #x""}> $ds #f>
|
||||||
|
|
||||||
|
? <service-object <daemon syndesizer> ?cap> [
|
||||||
|
$cap <json-stdio-translator {
|
||||||
|
argv: [
|
||||||
|
"yt-dlp"
|
||||||
|
"--dump-json"
|
||||||
|
"https://youtu.be/RR9GkEXDvog"
|
||||||
|
]
|
||||||
|
dataspace: $ds
|
||||||
|
}>
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
### Webooks
|
### Webooks
|
||||||
|
|
||||||
Listens for webhook requests and sends request data to a dataspace as messages.
|
Listens for webhook requests and sends request data to a dataspace as messages.
|
||||||
|
@ -106,10 +129,6 @@ Request data is formated according to the http schema [defined in syndicate-prot
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## json_translator
|
|
||||||
|
|
||||||
Wrapper that executes a command, parses its JSON output, converts to Preserves record `<recv @jsonData any>`, and publishes and messages to its initial dataspace.
|
|
||||||
|
|
||||||
## mintsturdyref
|
## mintsturdyref
|
||||||
|
|
||||||
A utility for minting [Sturdyrefs](https://synit.org/book/operation/builtin/gatekeeper.html#sturdyrefs).
|
A utility for minting [Sturdyrefs](https://synit.org/book/operation/builtin/gatekeeper.html#sturdyrefs).
|
||||||
|
|
|
@ -6,6 +6,11 @@ CacheArguments = <cache {
|
||||||
lifetime: float
|
lifetime: float
|
||||||
}>.
|
}>.
|
||||||
|
|
||||||
|
JsonTranslatorArguments = <json-stdio-translator {
|
||||||
|
argv: [string ...]
|
||||||
|
dataspace: #!any
|
||||||
|
}>.
|
||||||
|
|
||||||
JsonTranslatorConnected = <connected @path string>.
|
JsonTranslatorConnected = <connected @path string>.
|
||||||
|
|
||||||
JsonSocketTranslatorArguments = <json-socket-translator {
|
JsonSocketTranslatorArguments = <json-socket-translator {
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
|
||||||
# SPDX-License-Identifier: Unlicense
|
|
||||||
|
|
||||||
import std/[json, os, osproc]
|
|
||||||
import preserves
|
|
||||||
import syndicate, syndicate/relays
|
|
||||||
|
|
||||||
from preserves/jsonhooks import toPreservesHook
|
|
||||||
|
|
||||||
import ./json_messages
|
|
||||||
|
|
||||||
proc runChild: string =
|
|
||||||
let params = commandLineParams()
|
|
||||||
if params.len < 1:
|
|
||||||
stderr.writeLine "not enough parameters"
|
|
||||||
quit 1
|
|
||||||
let
|
|
||||||
cmd = params[0]
|
|
||||||
args = params[1..params.high]
|
|
||||||
try: result = execProcess(command=cmd, args=args, options={poUsePath})
|
|
||||||
except CatchableError as err:
|
|
||||||
quit("execProcess failed: " & err.msg)
|
|
||||||
if result == "":
|
|
||||||
stderr.writeLine "no ouput"
|
|
||||||
quit 1
|
|
||||||
|
|
||||||
runActor("main") do (ds: Cap; turn: var Turn):
|
|
||||||
connectStdio(turn, ds)
|
|
||||||
let js = runChild().parseJson()
|
|
||||||
message(turn, ds, RecvJson(data: js))
|
|
||||||
discard publish(turn, ds, RecvJson(data: js))
|
|
|
@ -3,6 +3,13 @@ import
|
||||||
preserves, std/tables
|
preserves, std/tables
|
||||||
|
|
||||||
type
|
type
|
||||||
|
JsonTranslatorArgumentsField0* {.preservesDictionary.} = object
|
||||||
|
`argv`*: seq[string]
|
||||||
|
`dataspace`* {.preservesEmbedded.}: EmbeddedRef
|
||||||
|
|
||||||
|
JsonTranslatorArguments* {.preservesRecord: "json-stdio-translator".} = object
|
||||||
|
`field0`*: JsonTranslatorArgumentsField0
|
||||||
|
|
||||||
JsonTranslatorConnected* {.preservesRecord: "connected".} = object
|
JsonTranslatorConnected* {.preservesRecord: "connected".} = object
|
||||||
`path`*: string
|
`path`*: string
|
||||||
|
|
||||||
|
@ -31,13 +38,15 @@ type
|
||||||
`host`*: string
|
`host`*: string
|
||||||
`port`*: BiggestInt
|
`port`*: BiggestInt
|
||||||
|
|
||||||
proc `$`*(x: JsonTranslatorConnected | JsonSocketTranslatorArguments |
|
proc `$`*(x: JsonTranslatorArguments | JsonTranslatorConnected |
|
||||||
|
JsonSocketTranslatorArguments |
|
||||||
WebhooksArguments |
|
WebhooksArguments |
|
||||||
CacheArguments |
|
CacheArguments |
|
||||||
Tcp): string =
|
Tcp): string =
|
||||||
`$`(toPreserves(x))
|
`$`(toPreserves(x))
|
||||||
|
|
||||||
proc encode*(x: JsonTranslatorConnected | JsonSocketTranslatorArguments |
|
proc encode*(x: JsonTranslatorArguments | JsonTranslatorConnected |
|
||||||
|
JsonSocketTranslatorArguments |
|
||||||
WebhooksArguments |
|
WebhooksArguments |
|
||||||
CacheArguments |
|
CacheArguments |
|
||||||
Tcp): seq[byte] =
|
Tcp): seq[byte] =
|
||||||
|
|
|
@ -6,11 +6,12 @@
|
||||||
import syndicate, syndicate/relays, syndicate/actors/timers
|
import syndicate, syndicate/relays, syndicate/actors/timers
|
||||||
|
|
||||||
import ./syndesizer/[
|
import ./syndesizer/[
|
||||||
cache_actor, json_socket_translator, webhooks]
|
cache_actor, json_socket_translator, json_translator, webhooks]
|
||||||
|
|
||||||
runActor("syndesizer") do (turn: var Turn; root: Cap):
|
runActor("syndesizer") do (turn: var Turn; root: Cap):
|
||||||
connectStdio(turn, root)
|
connectStdio(turn, root)
|
||||||
discard spawnTimers(turn, root)
|
discard spawnTimers(turn, root)
|
||||||
discard spawnCacheActor(turn, root)
|
discard spawnCacheActor(turn, root)
|
||||||
discard spawnJsonSocketTranslator(turn, root)
|
discard spawnJsonSocketTranslator(turn, root)
|
||||||
|
discard spawnJsonStdioTranslator(turn, root)
|
||||||
discard spawnWebhookActor(turn, root)
|
discard spawnWebhookActor(turn, root)
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
||||||
|
# SPDX-License-Identifier: Unlicense
|
||||||
|
|
||||||
|
import std/[json, osproc]
|
||||||
|
import preserves
|
||||||
|
import syndicate, syndicate/relays
|
||||||
|
|
||||||
|
import ../schema/config
|
||||||
|
import ../json_messages
|
||||||
|
|
||||||
|
proc runChild(params: seq[string]): string =
|
||||||
|
if params.len < 1:
|
||||||
|
stderr.writeLine "not enough parameters"
|
||||||
|
let
|
||||||
|
cmd = params[0]
|
||||||
|
args = params[1..params.high]
|
||||||
|
try: result = execProcess(command=cmd, args=args, options={poUsePath})
|
||||||
|
except CatchableError as err:
|
||||||
|
quit("execProcess failed: " & err.msg)
|
||||||
|
if result == "":
|
||||||
|
stderr.writeLine "no ouput"
|
||||||
|
|
||||||
|
proc spawnJsonStdioTranslator*(turn: var Turn; root: Cap): Actor {.discardable.} =
|
||||||
|
spawn("json-stdio-translator", turn) do (turn: var Turn):
|
||||||
|
during(turn, root, ?:JsonTranslatorArguments) do (argv: seq[string], ds: Cap):
|
||||||
|
var js = parseJson(runChild(argv))
|
||||||
|
message(turn, ds, RecvJson(data: js))
|
||||||
|
discard publish(turn, ds, RecvJson(data: js))
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
runActor("main") do (turn: var Turn; root: Cap):
|
||||||
|
connectStdio(turn, root)
|
||||||
|
spawnJsonStdioTranslator(turn, root)
|
|
@ -5,7 +5,7 @@ author = "Emery Hemingway"
|
||||||
description = "Utilites for Syndicated Actors and Synit"
|
description = "Utilites for Syndicated Actors and Synit"
|
||||||
license = "unlicense"
|
license = "unlicense"
|
||||||
srcDir = "src"
|
srcDir = "src"
|
||||||
bin = @["json_translator", "mintsturdyref", "mount_actor", "msg", "net_mapper", "preserve_process_environment", "syndex_card", "syndump"]
|
bin = @["mintsturdyref", "mount_actor", "msg", "net_mapper", "preserve_process_environment", "syndex_card", "syndump"]
|
||||||
|
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
|
Loading…
Reference in New Issue