Compare commits

...

22 Commits

Author SHA1 Message Date
Joel Wetzell 28e8e4f8c7 Merge pull request #186 from jwetzell/dependabot/go_modules/github.com/emiago/diago-0.29.0
Bump github.com/emiago/diago from 0.28.0 to 0.29.0
2026-06-14 15:31:50 -05:00
Joel Wetzell 34dd6a0d31 update with new return signature 2026-06-14 15:29:38 -05:00
Joel Wetzell 2af9f348e7 Merge pull request #187 from jwetzell/dependabot/go_modules/modernc.org/sqlite-1.52.0
Bump modernc.org/sqlite from 1.51.0 to 1.52.0
2026-06-10 11:34:34 -05:00
dependabot[bot] b207643f1c Bump modernc.org/sqlite from 1.51.0 to 1.52.0
Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.51.0 to 1.52.0.
- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.51.0...v1.52.0)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-version: 1.52.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-09 17:24:03 +00:00
dependabot[bot] ae100ec567 Bump github.com/emiago/diago from 0.28.0 to 0.29.0
Bumps [github.com/emiago/diago](https://github.com/emiago/diago) from 0.28.0 to 0.29.0.
- [Release notes](https://github.com/emiago/diago/releases)
- [Commits](https://github.com/emiago/diago/compare/v0.28.0...v0.29.0)

---
updated-dependencies:
- dependency-name: github.com/emiago/diago
  dependency-version: 0.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-09 17:23:52 +00:00
Joel Wetzell 05c027dca7 Merge pull request #181 from jwetzell/dependabot/github_actions/docker/setup-qemu-action-4.1.0
Bump docker/setup-qemu-action from 4.0.0 to 4.1.0
2026-06-07 21:13:10 -05:00
Joel Wetzell 6ef4215248 Merge pull request #182 from jwetzell/dependabot/go_modules/github.com/redis/go-redis/v9-9.20.0
Bump github.com/redis/go-redis/v9 from 9.19.0 to 9.20.0
2026-06-07 21:12:58 -05:00
Joel Wetzell ac51d9bd3d Merge pull request #183 from jwetzell/dependabot/go_modules/modernc.org/sqlite-1.51.0
Bump modernc.org/sqlite from 1.50.1 to 1.51.0
2026-06-07 21:12:42 -05:00
Joel Wetzell c01a101214 Merge pull request #184 from jwetzell/dependabot/go_modules/github.com/emiago/sipgo-1.4.0
Bump github.com/emiago/sipgo from 1.3.1 to 1.4.0
2026-06-07 21:12:22 -05:00
Joel Wetzell 7d401b9570 Merge pull request #185 from jwetzell/dependabot/go_modules/github.com/nats-io/nats-server/v2-2.14.2
Bump github.com/nats-io/nats-server/v2 from 2.14.1 to 2.14.2
2026-06-07 21:12:11 -05:00
dependabot[bot] 809c31847b Bump github.com/nats-io/nats-server/v2 from 2.14.1 to 2.14.2
Bumps [github.com/nats-io/nats-server/v2](https://github.com/nats-io/nats-server) from 2.14.1 to 2.14.2.
- [Release notes](https://github.com/nats-io/nats-server/releases)
- [Changelog](https://github.com/nats-io/nats-server/blob/main/RELEASES.md)
- [Commits](https://github.com/nats-io/nats-server/compare/v2.14.1...v2.14.2)

---
updated-dependencies:
- dependency-name: github.com/nats-io/nats-server/v2
  dependency-version: 2.14.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 00:43:00 +00:00
dependabot[bot] bdcf5a06ce Bump github.com/emiago/sipgo from 1.3.1 to 1.4.0
Bumps [github.com/emiago/sipgo](https://github.com/emiago/sipgo) from 1.3.1 to 1.4.0.
- [Release notes](https://github.com/emiago/sipgo/releases)
- [Commits](https://github.com/emiago/sipgo/compare/v1.3.1...v1.4.0)

---
updated-dependencies:
- dependency-name: github.com/emiago/sipgo
  dependency-version: 1.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 00:42:47 +00:00
dependabot[bot] 09a46d3634 Bump modernc.org/sqlite from 1.50.1 to 1.51.0
Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.50.1 to 1.51.0.
- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.50.1...v1.51.0)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-version: 1.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 00:42:42 +00:00
dependabot[bot] 7385f25b3d Bump github.com/redis/go-redis/v9 from 9.19.0 to 9.20.0
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.19.0 to 9.20.0.
- [Release notes](https://github.com/redis/go-redis/releases)
- [Changelog](https://github.com/redis/go-redis/blob/master/RELEASE-NOTES.md)
- [Commits](https://github.com/redis/go-redis/compare/v9.19.0...v9.20.0)

---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
  dependency-version: 9.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 00:42:37 +00:00
dependabot[bot] 94a59413a1 Bump docker/setup-qemu-action from 4.0.0 to 4.1.0
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/ce360397dd3f832beb865e1373c09c0e9f86d70a...06116385d9baf250c9f4dcb4858b16962ea869c3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 00:42:07 +00:00
Joel Wetzell b7e0d879bc Merge pull request #179 from jwetzell/fix/in-out-framer
make sure to use a distinct framer for both directions of communication
2026-06-01 21:35:58 -05:00
Joel Wetzell 9b76ee8195 make sure to use a distinct framer for both directions of communication 2026-06-01 21:32:14 -05:00
Joel Wetzell d48a89d1ef reword description 2026-06-01 18:30:19 -05:00
Joel Wetzell b01bebea54 Merge pull request #178 from jwetzell/processor-params-schema-descriptions
add description information to params for processors
2026-06-01 17:56:39 -05:00
Joel Wetzell 73905e1274 add description information to params for processors 2026-06-01 17:55:30 -05:00
Joel Wetzell 56566cf666 Merge pull request #177 from jwetzell/module-params-descriptions
add description information to params for modules
2026-06-01 17:39:30 -05:00
Joel Wetzell 5d1e6622cb add description information to params for modules 2026-06-01 17:39:00 -05:00
54 changed files with 460 additions and 323 deletions
+1 -1
View File
@@ -218,7 +218,7 @@ jobs:
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0 uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0 uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
+9 -9
View File
@@ -4,8 +4,8 @@ go 1.26.3
require ( require (
github.com/eclipse/paho.mqtt.golang v1.5.1 github.com/eclipse/paho.mqtt.golang v1.5.1
github.com/emiago/diago v0.28.0 github.com/emiago/diago v0.29.0
github.com/emiago/sipgo v1.3.1 github.com/emiago/sipgo v1.4.0
github.com/expr-lang/expr v1.17.8 github.com/expr-lang/expr v1.17.8
github.com/extism/go-sdk v1.7.1 github.com/extism/go-sdk v1.7.1
github.com/google/jsonschema-go v0.4.3 github.com/google/jsonschema-go v0.4.3
@@ -14,15 +14,15 @@ require (
github.com/jwetzell/free-d-go v0.2.0 github.com/jwetzell/free-d-go v0.2.0
github.com/jwetzell/osc-go v0.3.0 github.com/jwetzell/osc-go v0.3.0
github.com/jwetzell/psn-go v0.3.0 github.com/jwetzell/psn-go v0.3.0
github.com/nats-io/nats-server/v2 v2.14.1 github.com/nats-io/nats-server/v2 v2.14.2
github.com/nats-io/nats.go v1.52.0 github.com/nats-io/nats.go v1.52.0
github.com/redis/go-redis/v9 v9.19.0 github.com/redis/go-redis/v9 v9.20.0
github.com/urfave/cli/v3 v3.9.0 github.com/urfave/cli/v3 v3.9.0
gitlab.com/gomidi/midi/v2 v2.3.23 gitlab.com/gomidi/midi/v2 v2.3.23
go.bug.st/serial v1.7.1 go.bug.st/serial v1.7.1
golang.org/x/time v0.15.0 golang.org/x/time v0.15.0
modernc.org/quickjs v0.18.2 modernc.org/quickjs v0.18.2
modernc.org/sqlite v1.50.1 modernc.org/sqlite v1.52.0
sigs.k8s.io/yaml v1.6.0 sigs.k8s.io/yaml v1.6.0
) )
@@ -44,8 +44,8 @@ require (
github.com/klauspost/compress v1.18.6 // indirect github.com/klauspost/compress v1.18.6 // indirect
github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-isatty v0.0.22 // indirect
github.com/minio/highwayhash v1.0.4 // indirect github.com/minio/highwayhash v1.0.4 // indirect
github.com/nats-io/jwt/v2 v2.8.1 // indirect github.com/nats-io/jwt/v2 v2.8.2 // indirect
github.com/nats-io/nkeys v0.4.15 // indirect github.com/nats-io/nkeys v0.4.16 // indirect
github.com/nats-io/nuid v1.0.1 // indirect github.com/nats-io/nuid v1.0.1 // indirect
github.com/ncruces/go-strftime v1.0.0 // indirect github.com/ncruces/go-strftime v1.0.0 // indirect
github.com/pion/logging v0.2.4 // indirect github.com/pion/logging v0.2.4 // indirect
@@ -63,10 +63,10 @@ require (
go.uber.org/atomic v1.11.0 // indirect go.uber.org/atomic v1.11.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.51.0 // indirect golang.org/x/crypto v0.52.0 // indirect
golang.org/x/net v0.54.0 // indirect golang.org/x/net v0.54.0 // indirect
golang.org/x/sync v0.20.0 // indirect golang.org/x/sync v0.20.0 // indirect
golang.org/x/sys v0.44.0 // indirect golang.org/x/sys v0.45.0 // indirect
golang.org/x/tools v0.44.0 // indirect golang.org/x/tools v0.44.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/hraban/opus.v2 v2.0.0-20230925203106-0188a62cb302 // indirect gopkg.in/hraban/opus.v2 v2.0.0-20230925203106-0188a62cb302 // indirect
+18 -18
View File
@@ -14,12 +14,12 @@ github.com/dylibso/observe-sdk/go v0.0.0-20240828172851-9145d8ad07e1 h1:idfl8M8r
github.com/dylibso/observe-sdk/go v0.0.0-20240828172851-9145d8ad07e1/go.mod h1:C8DzXehI4zAbrdlbtOByKX6pfivJTBiV9Jjqv56Yd9Q= github.com/dylibso/observe-sdk/go v0.0.0-20240828172851-9145d8ad07e1/go.mod h1:C8DzXehI4zAbrdlbtOByKX6pfivJTBiV9Jjqv56Yd9Q=
github.com/eclipse/paho.mqtt.golang v1.5.1 h1:/VSOv3oDLlpqR2Epjn1Q7b2bSTplJIeV2ISgCl2W7nE= github.com/eclipse/paho.mqtt.golang v1.5.1 h1:/VSOv3oDLlpqR2Epjn1Q7b2bSTplJIeV2ISgCl2W7nE=
github.com/eclipse/paho.mqtt.golang v1.5.1/go.mod h1:1/yJCneuyOoCOzKSsOTUc0AJfpsItBGWvYpBLimhArU= github.com/eclipse/paho.mqtt.golang v1.5.1/go.mod h1:1/yJCneuyOoCOzKSsOTUc0AJfpsItBGWvYpBLimhArU=
github.com/emiago/diago v0.28.0 h1:VCiimhFYLoBTsxH6WrufLSt6tKWG8Fv7LfCkZHqct2E= github.com/emiago/diago v0.29.0 h1:9hy8DDY0vkZgsxq4hD+EmcP2Uc/jhUnEbLI8ArgjlyE=
github.com/emiago/diago v0.28.0/go.mod h1:eQT6j9co9PMQ/25aUiM2jpvwxxWFXLWi2w5R3lZNmKg= github.com/emiago/diago v0.29.0/go.mod h1:UDLuthSV96A0Qf/fUluhBAAAWj0NWHsMZMHPkBy46Y8=
github.com/emiago/dtls/v3 v3.0.0-20260122183559-8b8d23e359c0 h1:o4LxpUnZ1zxiQ+Qjc9kLwXcjz31NGAHmnZ7xoJto3VM= github.com/emiago/dtls/v3 v3.0.0-20260122183559-8b8d23e359c0 h1:o4LxpUnZ1zxiQ+Qjc9kLwXcjz31NGAHmnZ7xoJto3VM=
github.com/emiago/dtls/v3 v3.0.0-20260122183559-8b8d23e359c0/go.mod h1:ydcZ977eS1I6uOWodzMuw30BwvNAzT9su/xcNYSJqjA= github.com/emiago/dtls/v3 v3.0.0-20260122183559-8b8d23e359c0/go.mod h1:ydcZ977eS1I6uOWodzMuw30BwvNAzT9su/xcNYSJqjA=
github.com/emiago/sipgo v1.3.1 h1:JwcmYJtCmcjuLwB2ZxtupYilNQgwXN/JIcxp+CDq16A= github.com/emiago/sipgo v1.4.0 h1:IRiwIUu4H97gC+vq2zsm3iWe/j08LPExFZRe3kfY0f0=
github.com/emiago/sipgo v1.3.1/go.mod h1:DuwAxBZhKMqIzQFPGZb1MVAGU6Wuxj64oTOhd5dx/FY= github.com/emiago/sipgo v1.4.0/go.mod h1:DuwAxBZhKMqIzQFPGZb1MVAGU6Wuxj64oTOhd5dx/FY=
github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM=
github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4=
github.com/extism/go-sdk v1.7.1 h1:lWJos6uY+tRFdlIHR+SJjwFDApY7OypS/2nMhiVQ9Sw= github.com/extism/go-sdk v1.7.1 h1:lWJos6uY+tRFdlIHR+SJjwFDApY7OypS/2nMhiVQ9Sw=
@@ -72,14 +72,14 @@ github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw
github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4=
github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ=
github.com/nats-io/jwt/v2 v2.8.1 h1:V0xpGuD/N8Mi+fQNDynXohVvp7ZztevW5io8CUWlPmU= github.com/nats-io/jwt/v2 v2.8.2 h1:XXRgB60MSTnqsRwejQurVDs/hcv2dkt+86GjI+I/bMc=
github.com/nats-io/jwt/v2 v2.8.1/go.mod h1:nWnOEEiVMiKHQpnAy4eXlizVEtSfzacZ1Q43LIRavZg= github.com/nats-io/jwt/v2 v2.8.2/go.mod h1:Ag/56sq9OblL4JgdYufDd16Egb17Kr/8WwwuO/forVc=
github.com/nats-io/nats-server/v2 v2.14.1 h1:wXs/a5fw9Hzm3CvuzLxGeIwpjPulSa7gMT3eSuhGkcg= github.com/nats-io/nats-server/v2 v2.14.2 h1:Q7dRhCY03Y00rETFW3KV+KGaCIajlDfWgWUVgbMxyuk=
github.com/nats-io/nats-server/v2 v2.14.1/go.mod h1:4N17zLpuS7WMbG8T9gsE2B7z9hC9PraPyulVBfpK6nU= github.com/nats-io/nats-server/v2 v2.14.2/go.mod h1:lWpb1bSpRELZfRdlMkdz8E7lbXKKyNe8RIn0vvepIHs=
github.com/nats-io/nats.go v1.52.0 h1:n3avV4VBsCgsdwh71TppsTwtv+QdPs7ntSKM8qJLGsc= github.com/nats-io/nats.go v1.52.0 h1:n3avV4VBsCgsdwh71TppsTwtv+QdPs7ntSKM8qJLGsc=
github.com/nats-io/nats.go v1.52.0/go.mod h1:26HypzazeOkyO3/mqd1zZd53STJN0EjCYF9Uy2ZOBno= github.com/nats-io/nats.go v1.52.0/go.mod h1:26HypzazeOkyO3/mqd1zZd53STJN0EjCYF9Uy2ZOBno=
github.com/nats-io/nkeys v0.4.15 h1:JACV5jRVO9V856KOapQ7x+EY8Jo3qw1vJt/9Jpwzkk4= github.com/nats-io/nkeys v0.4.16 h1:rd5oAuLOb8mnAycB0xleuEBNS1pVVnN0fv/FF34Eypg=
github.com/nats-io/nkeys v0.4.15/go.mod h1:CpMchTXC9fxA5zrMo4KpySxNjiDVvr8ANOSZdiNfUrs= github.com/nats-io/nkeys v0.4.16/go.mod h1:llLgWoI0o4z/Q57q2R1kHfmocyhGV6VG/U18Glg1Afs=
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
@@ -98,8 +98,8 @@ github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k
github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k= github.com/redis/go-redis/v9 v9.20.0 h1:WnQYxLkgO2xiXTCJY0ldIiI8dNqCDlQAG+AtaH7a2a0=
github.com/redis/go-redis/v9 v9.19.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= github.com/redis/go-redis/v9 v9.20.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
@@ -128,8 +128,8 @@ go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
@@ -138,8 +138,8 @@ golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
@@ -181,8 +181,8 @@ modernc.org/quickjs v0.18.2 h1:v/KDawJfs4L7jSCItAKrkrHCmOL5VnDLMJOXpU8Evdk=
modernc.org/quickjs v0.18.2/go.mod h1:U11Fhn2hC71v+DyvEN3cY4IXkjU5XxrYT0DQWvZ43+A= modernc.org/quickjs v0.18.2/go.mod h1:U11Fhn2hC71v+DyvEN3cY4IXkjU5XxrYT0DQWvZ43+A=
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
modernc.org/sqlite v1.50.1 h1:l+cQvn0sd0zJJtfygGHuQJ5AjlrwXmWPw4KP3ZMwr9w= modernc.org/sqlite v1.52.0 h1:p4dhYh2tXZCiyaqHwRVJDjIGKWyXayiQpThxgDzJaxo=
modernc.org/sqlite v1.50.1/go.mod h1:tcNzv5p84E0skkmJn038y+hWJbLQXQqEnQfeh5r2JLM= modernc.org/sqlite v1.52.0/go.mod h1:tcNzv5p84E0skkmJn038y+hWJbLQXQqEnQfeh5r2JLM=
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
+4 -2
View File
@@ -22,8 +22,10 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"dsn": { "dsn": {
Type: "string", Title: "Data Source Name",
MinLength: new(1), Description: "the data source name (DSN) for the SQLite database",
Type: "string",
MinLength: new(1),
}, },
}, },
Required: []string{"dsn"}, Required: []string{"dsn"},
+5 -4
View File
@@ -24,10 +24,11 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port for the HTTP server to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Maximum: jsonschema.Ptr[float64](65535),
}, },
}, },
Required: []string{"port"}, Required: []string{"port"},
+3 -2
View File
@@ -22,8 +22,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"port": { "port": {
Title: "Port", Title: "Port",
Type: "string", Description: "the name of the MIDI port to listen to",
Type: "string",
}, },
}, },
Required: []string{"port"}, Required: []string{"port"},
+3 -2
View File
@@ -24,8 +24,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"port": { "port": {
Title: "Port", Title: "Port",
Type: "string", Description: "the name of the MIDI port to send messages to",
Type: "string",
}, },
}, },
Required: []string{"port"}, Required: []string{"port"},
+19 -14
View File
@@ -22,28 +22,33 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"broker": { "broker": {
Title: "Broker URL", Title: "Broker URL",
Type: "string", Description: "the URL of the MQTT broker to connect to",
Type: "string",
}, },
"topic": { "topic": {
Title: "Topic", Title: "Topic",
Type: "string", Description: "an MQTT topic to subscribe to",
Type: "string",
}, },
"clientId": { "clientId": {
Title: "Client ID", Title: "Client ID",
Type: "string", Description: "the client ID to use when connecting to the MQTT broker",
Type: "string",
}, },
"qos": { "qos": {
Title: "QoS", Title: "QoS",
Type: "integer", Description: "the QoS level to use when publishing messages",
Minimum: jsonschema.Ptr[float64](0), Type: "integer",
Maximum: jsonschema.Ptr[float64](2), Minimum: jsonschema.Ptr[float64](0),
Default: json.RawMessage(`0`), Maximum: jsonschema.Ptr[float64](2),
Default: json.RawMessage(`0`),
}, },
"retained": { "retained": {
Title: "Retained", Title: "Retained",
Type: "boolean", Description: "whether to set the retained flag when publishing messages",
Default: json.RawMessage(`false`), Type: "boolean",
Default: json.RawMessage(`false`),
}, },
}, },
Required: []string{"broker", "topic", "clientId"}, Required: []string{"broker", "topic", "clientId"},
+6 -4
View File
@@ -20,12 +20,14 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"url": { "url": {
Title: "NATS Server URL", Title: "NATS Server URL",
Type: "string", Description: "the URL of the NATS server to connect to",
Type: "string",
}, },
"subject": { "subject": {
Title: "Subject", Title: "Subject",
Type: "string", Description: "the subject to subscribe to",
Type: "string",
}, },
}, },
Required: []string{"url", "subject"}, Required: []string{"url", "subject"},
+10 -8
View File
@@ -24,16 +24,18 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"ip": { "ip": {
Title: "IP", Title: "IP",
Type: "string", Description: "the IP address to bind the NATS server to",
Default: json.RawMessage(`"0.0.0.0"`), Type: "string",
Default: json.RawMessage(`"0.0.0.0"`),
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port for the NATS server to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Default: json.RawMessage(`4222`), Maximum: jsonschema.Ptr[float64](65535),
Default: json.RawMessage(`4222`),
}, },
}, },
Required: []string{}, Required: []string{},
+8 -4
View File
@@ -21,12 +21,16 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"host": { "host": {
Type: "string", Title: "Host",
Description: "the hostname or IP address of the Redis server to connect to",
Type: "string",
}, },
"port": { "port": {
Type: "integer", Title: "Port",
Minimum: jsonschema.Ptr[float64](1), Description: "the port to use when connecting to the Redis server",
Maximum: jsonschema.Ptr[float64](65535), Type: "integer",
Minimum: jsonschema.Ptr[float64](1),
Maximum: jsonschema.Ptr[float64](65535),
}, },
}, },
Required: []string{"host", "port"}, Required: []string{"host", "port"},
+29 -15
View File
@@ -25,17 +25,20 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"port": { "port": {
Title: "Port", Title: "Port",
Type: "string", Description: "the name of the serial port to connect to",
Type: "string",
}, },
"baudRate": { "baudRate": {
Title: "Baud Rate", Title: "Baud Rate",
Type: "integer", Description: "the baud rate to use when connecting to the serial port",
Type: "integer",
}, },
"framing": { "framing": {
Title: "Framing Method", Title: "Framing Method",
Type: "string", Description: "the method to use for framing messages on the serial port",
Enum: []any{"LF", "CR", "CRLF", "SLIP", "RAW"}, Type: "string",
Enum: []any{"LF", "CR", "CRLF", "SLIP", "RAW"},
}, },
}, },
Required: []string{"port", "baudRate", "framing"}, Required: []string{"port", "baudRate", "framing"},
@@ -53,12 +56,14 @@ func init() {
return nil, fmt.Errorf("serial.client framing error: %w", err) return nil, fmt.Errorf("serial.client framing error: %w", err)
} }
framer := framer.GetFramer(framingMethodString) inFramer := framer.GetFramer(framingMethodString)
if framer == nil { if inFramer == nil {
return nil, fmt.Errorf("serial.client unknown framing method: %s", framingMethodString) return nil, fmt.Errorf("serial.client unknown framing method: %s", framingMethodString)
} }
outFramer := framer.GetFramer(framingMethodString)
baudRateInt, err := params.GetInt("baudRate") baudRateInt, err := params.GetInt("baudRate")
if err != nil { if err != nil {
return nil, fmt.Errorf("serial.client baudRate error: %w", err) return nil, fmt.Errorf("serial.client baudRate error: %w", err)
@@ -68,7 +73,7 @@ func init() {
BaudRate: baudRateInt, BaudRate: baudRateInt,
} }
return &SerialClient{config: config, Port: portString, Framer: framer, Mode: &mode, logger: CreateLogger(config)}, nil return &SerialClient{config: config, Port: portString, inFramer: inFramer, outFramer: outFramer, Mode: &mode, logger: CreateLogger(config)}, nil
}, },
}) })
} }
@@ -78,7 +83,8 @@ type SerialClient struct {
ctx context.Context ctx context.Context
inputHandler common.InputHandler inputHandler common.InputHandler
Port string Port string
Framer framer.Framer inFramer framer.Framer
outFramer framer.Framer
Mode *serial.Mode Mode *serial.Mode
port serial.Port port serial.Port
logger *slog.Logger logger *slog.Logger
@@ -139,13 +145,13 @@ func (sc *SerialClient) Start(ctx context.Context, inputHandler common.InputHand
byteCount, err := sc.port.Read(buffer) byteCount, err := sc.port.Read(buffer)
if err != nil { if err != nil {
sc.Framer.Clear() sc.inFramer.Clear()
break READ break READ
} }
if sc.Framer != nil { if sc.inFramer != nil {
if byteCount > 0 { if byteCount > 0 {
messages := sc.Framer.Decode(buffer[0:byteCount]) messages := sc.inFramer.Decode(buffer[0:byteCount])
for _, message := range messages { for _, message := range messages {
if sc.inputHandler != nil { if sc.inputHandler != nil {
sc.inputHandler(sc.ctx, sc.Id(), message) sc.inputHandler(sc.ctx, sc.Id(), message)
@@ -172,7 +178,7 @@ func (sc *SerialClient) Output(ctx context.Context, payload any) error {
return errors.New("serial.client can only output bytes") return errors.New("serial.client can only output bytes")
} }
_, err := sc.port.Write(sc.Framer.Encode(payloadBytes)) _, err := sc.port.Write(sc.outFramer.Encode(payloadBytes))
return err return err
} }
@@ -185,4 +191,12 @@ func (sc *SerialClient) Stop() {
if sc.port != nil { if sc.port != nil {
sc.port.Close() sc.port.Close()
} }
if sc.inFramer != nil {
sc.inFramer.Clear()
}
if sc.outFramer != nil {
sc.outFramer.Clear()
}
} }
+23 -16
View File
@@ -29,27 +29,31 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"ip": { "ip": {
Title: "IP", Title: "IP",
Type: "string", Description: "the IP address to bind the SIP server to",
Default: json.RawMessage(`"0.0.0.0"`), Type: "string",
Default: json.RawMessage(`"0.0.0.0"`),
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port for the SIP server to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Default: json.RawMessage(`5060`), Maximum: jsonschema.Ptr[float64](65535),
Default: json.RawMessage(`5060`),
}, },
"transport": { "transport": {
Title: "Transport", Title: "Transport",
Type: "string", Description: "the transport protocol to use for the SIP server",
Enum: []any{"udp", "tcp", "ws", "udp4", "tcp4"}, Type: "string",
Default: json.RawMessage(`"udp"`), Enum: []any{"udp", "tcp", "ws", "udp4", "tcp4"},
Default: json.RawMessage(`"udp"`),
}, },
"userAgent": { "userAgent": {
Title: "User Agent", Title: "User Agent",
Type: "string", Description: "the user agent string to use",
Default: json.RawMessage(`"showbridge"`), Type: "string",
Default: json.RawMessage(`"showbridge"`),
}, },
}, },
Required: []string{}, Required: []string{},
@@ -208,7 +212,10 @@ func (scs *SIPCallServer) Output(ctx context.Context, payload any) error {
payloadDTMFResponse, ok := common.GetAnyAs[processor.SipDTMFResponse](payload) payloadDTMFResponse, ok := common.GetAnyAs[processor.SipDTMFResponse](payload)
if ok { if ok {
dtmfWriter := call.inDialog.AudioWriterDTMF() dtmfWriter, err := call.inDialog.AudioWriterDTMF()
if err != nil {
return err
}
time.Sleep(time.Millisecond * time.Duration(payloadDTMFResponse.PreWait)) time.Sleep(time.Millisecond * time.Duration(payloadDTMFResponse.PreWait))
for i, dtmfRune := range payloadDTMFResponse.Digits { for i, dtmfRune := range payloadDTMFResponse.Digits {
err := dtmfWriter.WriteDTMF(dtmfRune) err := dtmfWriter.WriteDTMF(dtmfRune)
+32 -21
View File
@@ -30,33 +30,38 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"ip": { "ip": {
Title: "IP", Title: "IP",
Type: "string", Description: "the IP address to bind the SIP server to",
Default: json.RawMessage(`"0.0.0.0"`), Type: "string",
Default: json.RawMessage(`"0.0.0.0"`),
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port for the SIP server to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Default: json.RawMessage(`5060`), Maximum: jsonschema.Ptr[float64](65535),
Default: json.RawMessage(`5060`),
}, },
"transport": { "transport": {
Title: "Transport", Title: "Transport",
Type: "string", Description: "the transport protocol to use for the SIP server",
Enum: []any{"udp", "tcp", "ws", "udp4", "tcp4"}, Type: "string",
Default: json.RawMessage(`"udp"`), Enum: []any{"udp", "tcp", "ws", "udp4", "tcp4"},
Default: json.RawMessage(`"udp"`),
}, },
"userAgent": { "userAgent": {
Title: "User Agent", Title: "User Agent",
Type: "string", Description: "the user agent string to use",
Default: json.RawMessage(`"showbridge"`), Type: "string",
Default: json.RawMessage(`"showbridge"`),
}, },
"separator": { "separator": {
Title: "DTMF Separator", Title: "DTMF Separator",
Type: "string", Description: "the DTMF character to use as a separator between DTMF digit groups",
MinLength: new(1), Type: "string",
MaxLength: new(1), MinLength: new(1),
MaxLength: new(1),
}, },
}, },
Required: []string{"separator"}, Required: []string{"separator"},
@@ -199,7 +204,10 @@ func (sds *SIPDTMFServer) HandleCall(inDialog *diago.DialogServerSession) error
inDialog.Ringing() inDialog.Ringing()
inDialog.Answer() inDialog.Answer()
reader := inDialog.AudioReaderDTMF() reader, err := inDialog.AudioReaderDTMF()
if err != nil {
return err
}
userString := "" userString := ""
return reader.Listen(func(dtmf rune) error { return reader.Listen(func(dtmf rune) error {
@@ -241,7 +249,10 @@ func (sds *SIPDTMFServer) Output(ctx context.Context, payload any) error {
payloadDTMFResponse, ok := common.GetAnyAs[processor.SipDTMFResponse](payload) payloadDTMFResponse, ok := common.GetAnyAs[processor.SipDTMFResponse](payload)
if ok { if ok {
dtmfWriter := call.inDialog.AudioWriterDTMF() dtmfWriter, err := call.inDialog.AudioWriterDTMF()
if err != nil {
return err
}
time.Sleep(time.Millisecond * time.Duration(payloadDTMFResponse.PreWait)) time.Sleep(time.Millisecond * time.Duration(payloadDTMFResponse.PreWait))
for i, dtmfRune := range payloadDTMFResponse.Digits { for i, dtmfRune := range payloadDTMFResponse.Digits {
+30 -16
View File
@@ -23,19 +23,22 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"host": { "host": {
Title: "Host", Title: "Host",
Type: "string", Description: "the hostname or IP address of the TCP server to connect to",
Type: "string",
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port of the TCP server to connect to",
Minimum: jsonschema.Ptr[float64](1), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1),
Maximum: jsonschema.Ptr[float64](65535),
}, },
"framing": { "framing": {
Title: "Framing Method", Title: "Framing Method",
Type: "string", Description: "the method used to frame messages over the TCP connection",
Enum: []any{"LF", "CR", "CRLF", "SLIP", "RAW"}, Type: "string",
Enum: []any{"LF", "CR", "CRLF", "SLIP", "RAW"},
}, },
}, },
Required: []string{"host", "port", "framing"}, Required: []string{"host", "port", "framing"},
@@ -63,19 +66,22 @@ func init() {
return nil, fmt.Errorf("net.tcp.client framing error: %w", err) return nil, fmt.Errorf("net.tcp.client framing error: %w", err)
} }
framer := framer.GetFramer(framingMethodString) inFramer := framer.GetFramer(framingMethodString)
if framer == nil { if inFramer == nil {
return nil, fmt.Errorf("net.tcp.client unknown framing method: %s", framingMethodString) return nil, fmt.Errorf("net.tcp.client unknown framing method: %s", framingMethodString)
} }
return &TCPClient{framer: framer, Addr: addr, config: config, logger: CreateLogger(config)}, nil
outFramer := framer.GetFramer(framingMethodString)
return &TCPClient{inFramer: inFramer, outFramer: outFramer, Addr: addr, config: config, logger: CreateLogger(config)}, nil
}, },
}) })
} }
type TCPClient struct { type TCPClient struct {
config config.ModuleConfig config config.ModuleConfig
framer framer.Framer inFramer framer.Framer
outFramer framer.Framer
conn *net.TCPConn conn *net.TCPConn
ctx context.Context ctx context.Context
inputHandler common.InputHandler inputHandler common.InputHandler
@@ -132,9 +138,9 @@ CONNECT_RETRY:
break READ break READ
} }
if tc.framer != nil { if tc.inFramer != nil {
if byteCount > 0 { if byteCount > 0 {
messages := tc.framer.Decode(buffer[0:byteCount]) messages := tc.inFramer.Decode(buffer[0:byteCount])
for _, message := range messages { for _, message := range messages {
if tc.inputHandler != nil { if tc.inputHandler != nil {
tc.inputHandler(tc.ctx, tc.Id(), message) tc.inputHandler(tc.ctx, tc.Id(), message)
@@ -169,7 +175,7 @@ func (tc *TCPClient) Output(ctx context.Context, payload any) error {
if !ok { if !ok {
return errors.New("net.tcp.client is only able to output bytes") return errors.New("net.tcp.client is only able to output bytes")
} }
_, err := tc.conn.Write(tc.framer.Encode(payloadBytes)) _, err := tc.conn.Write(tc.inFramer.Encode(payloadBytes))
return err return err
} }
@@ -182,4 +188,12 @@ func (tc *TCPClient) Stop() {
if tc.conn != nil { if tc.conn != nil {
tc.conn.Close() tc.conn.Close()
} }
if tc.inFramer != nil {
tc.inFramer.Clear()
}
if tc.outFramer != nil {
tc.outFramer.Clear()
}
} }
+20 -17
View File
@@ -26,20 +26,23 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"ip": { "ip": {
Title: "IP", Title: "IP",
Type: "string", Description: "the IP address to bind the TCP server to",
Default: json.RawMessage(`"0.0.0.0"`), Type: "string",
Default: json.RawMessage(`"0.0.0.0"`),
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port for the TCP server to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Maximum: jsonschema.Ptr[float64](65535),
}, },
"framing": { "framing": {
Title: "Framing Method", Title: "Framing Method",
Type: "string", Description: "the method used to frame messages over the TCP connection",
Enum: []any{"LF", "CR", "CRLF", "SLIP", "RAW"}, Type: "string",
Enum: []any{"LF", "CR", "CRLF", "SLIP", "RAW"},
}, },
}, },
Required: []string{"port", "framing"}, Required: []string{"port", "framing"},
@@ -78,7 +81,7 @@ func init() {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &TCPServer{InFramer: inFramer, OutFramer: outFramer, framerType: framingMethodString, Addr: addr, config: moduleConfig, logger: CreateLogger(moduleConfig)}, nil return &TCPServer{inFramer: inFramer, outFramer: outFramer, framerType: framingMethodString, Addr: addr, config: moduleConfig, logger: CreateLogger(moduleConfig)}, nil
}, },
}) })
} }
@@ -91,8 +94,8 @@ type tcpConnection struct {
type TCPServer struct { type TCPServer struct {
config config.ModuleConfig config config.ModuleConfig
Addr *net.TCPAddr Addr *net.TCPAddr
InFramer framer.Framer inFramer framer.Framer
OutFramer framer.Framer outFramer framer.Framer
framerType string framerType string
ctx context.Context ctx context.Context
inputHandler common.InputHandler inputHandler common.InputHandler
@@ -146,9 +149,9 @@ func (ts *TCPServer) handleClient(client *net.TCPConn) {
} }
break break
} }
if ts.InFramer != nil { if ts.inFramer != nil {
if byteCount > 0 { if byteCount > 0 {
messages := ts.InFramer.Decode(buffer[0:byteCount]) messages := ts.inFramer.Decode(buffer[0:byteCount])
for _, message := range messages { for _, message := range messages {
if ts.inputHandler != nil { if ts.inputHandler != nil {
ts.inputHandler(ts.ctx, ts.Id(), message) ts.inputHandler(ts.ctx, ts.Id(), message)
@@ -216,11 +219,11 @@ func (ts *TCPServer) Output(ctx context.Context, payload any) error {
defer ts.connectionsMu.Unlock() defer ts.connectionsMu.Unlock()
var errorString strings.Builder var errorString strings.Builder
if ts.OutFramer == nil { if ts.outFramer == nil {
return errors.New("no output framer configured") return errors.New("no output framer configured")
} }
outputBytes := ts.OutFramer.Encode(payloadBytes) outputBytes := ts.outFramer.Encode(payloadBytes)
for _, connection := range ts.connections { for _, connection := range ts.connections {
_, err := connection.conn.Write(outputBytes) _, err := connection.conn.Write(outputBytes)
+1 -1
View File
@@ -20,8 +20,8 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"duration": { "duration": {
Title: "Duration", Title: "Duration",
Description: "time in milliseconds between emitted events",
Type: "integer", Type: "integer",
Description: "Interval duration in milliseconds",
}, },
}, },
Required: []string{"duration"}, Required: []string{"duration"},
+1 -1
View File
@@ -20,8 +20,8 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"duration": { "duration": {
Title: "Duration", Title: "Duration",
Description: "time in milliseconds before the timer fires",
Type: "integer", Type: "integer",
Description: "Interval duration in milliseconds",
}, },
}, },
Required: []string{"duration"}, Required: []string{"duration"},
+8 -6
View File
@@ -21,14 +21,16 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"host": { "host": {
Title: "Host", Title: "Host",
Type: "string", Description: "the hostname or IP address of the UDP server to connect to",
Type: "string",
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port of the UDP server to connect to",
Minimum: jsonschema.Ptr[float64](1), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1),
Maximum: jsonschema.Ptr[float64](65535),
}, },
}, },
Required: []string{"host", "port"}, Required: []string{"host", "port"},
+8 -6
View File
@@ -22,14 +22,16 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"ip": { "ip": {
Title: "IP", Title: "IP",
Type: "string", Description: "the multicast address to listen on",
Type: "string",
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Maximum: jsonschema.Ptr[float64](65535),
}, },
}, },
Required: []string{"ip", "port"}, Required: []string{"ip", "port"},
+15 -12
View File
@@ -23,22 +23,25 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"ip": { "ip": {
Title: "IP", Title: "IP",
Type: "string", Description: "the IP address to bind the UDP server to",
Default: json.RawMessage(`"0.0.0.0"`), Type: "string",
Default: json.RawMessage(`"0.0.0.0"`),
}, },
"port": { "port": {
Title: "Port", Title: "Port",
Type: "integer", Description: "the port for the UDP server to listen on",
Minimum: jsonschema.Ptr[float64](1024), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1024),
Maximum: jsonschema.Ptr[float64](65535),
}, },
"bufferSize": { "bufferSize": {
Title: "Buffer Size", Title: "Buffer Size",
Type: "integer", Description: "the size of the buffer for incoming UDP messages",
Minimum: jsonschema.Ptr[float64](1), Type: "integer",
Maximum: jsonschema.Ptr[float64](65535), Minimum: jsonschema.Ptr[float64](1),
Default: json.RawMessage("2048"), Maximum: jsonschema.Ptr[float64](65535),
Default: json.RawMessage("2048"),
}, },
}, },
Required: []string{"port"}, Required: []string{"port"},
+3 -2
View File
@@ -23,8 +23,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"url": { "url": {
Title: "URL", Title: "URL",
Type: "string", Description: "the URL of the WebSocket server to connect",
Type: "string",
}, },
}, },
Required: []string{"url"}, Required: []string{"url"},
+2 -2
View File
@@ -22,13 +22,13 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"module": { "module": {
Title: "Module ID", Title: "Module ID",
Type: "string",
Description: "ID of the database module to query", Description: "ID of the database module to query",
Type: "string",
}, },
"query": { "query": {
Title: "Query", Title: "Query",
Type: "string",
Description: "SQL query to execute", Description: "SQL query to execute",
Type: "string",
}, },
}, },
Required: []string{"module", "query"}, Required: []string{"module", "query"},
+3 -2
View File
@@ -19,8 +19,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"expression": { "expression": {
Title: "Expression", Title: "Expression",
Type: "string", Description: "Expr expression to evaluate, must return a boolean",
Type: "string",
}, },
}, },
Required: []string{"expression"}, Required: []string{"expression"},
+2 -2
View File
@@ -18,9 +18,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"rate": { "rate": {
Type: "integer",
Title: "Rate", Title: "Rate",
Description: "The number of events to allow per second.", Description: "number of events to allow per second",
Type: "integer",
}, },
}, },
Required: []string{"rate"}, Required: []string{"rate"},
+3 -2
View File
@@ -19,8 +19,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"pattern": { "pattern": {
Title: "Pattern", Title: "Pattern",
Type: "string", Description: "regex pattern to match against",
Type: "string",
}, },
}, },
Required: []string{"pattern"}, Required: []string{"pattern"},
+5 -4
View File
@@ -20,10 +20,11 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"bitSize": { "bitSize": {
Title: "Bit Size", Title: "Bit Size",
Type: "integer", Description: "bit size of the resulting float",
Enum: []any{32, 64}, Type: "integer",
Default: json.RawMessage("64"), Enum: []any{32, 64},
Default: json.RawMessage("64"),
}, },
}, },
AdditionalProperties: &jsonschema.Schema{Not: &jsonschema.Schema{}}, AdditionalProperties: &jsonschema.Schema{Not: &jsonschema.Schema{}},
+11 -8
View File
@@ -20,18 +20,21 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"bitSize": { "bitSize": {
Title: "Bit Size", Title: "Bit Size",
Type: "integer", Description: "bit size of the resulting float",
Enum: []any{32, 64}, Type: "integer",
Default: json.RawMessage("32"), Enum: []any{32, 64},
Default: json.RawMessage("32"),
}, },
"min": { "min": {
Title: "Minimum", Title: "Minimum",
Type: "number", Description: "inclusive minimum value of the random float",
Type: "number",
}, },
"max": { "max": {
Title: "Maximum", Title: "Maximum",
Type: "number", Description: "exclusive maximum value of the random float",
Type: "number",
}, },
}, },
Required: []string{"min", "max"}, Required: []string{"min", "max"},
+27 -18
View File
@@ -21,40 +21,49 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"id": { "id": {
Title: "Camera ID", Title: "Camera ID",
Type: "string", Description: "ID of the camera this FreeD position corresponds to",
Type: "string",
}, },
"pan": { "pan": {
Title: "Pan", Title: "Pan",
Type: "string", Description: "pan angle of the camera",
Type: "string",
}, },
"tilt": { "tilt": {
Title: "Tilt", Title: "Tilt",
Type: "string", Description: "tilt angle of the camera",
Type: "string",
}, },
"roll": { "roll": {
Title: "Roll", Title: "Roll",
Type: "string", Description: "roll angle of the camera",
Type: "string",
}, },
"posX": { "posX": {
Title: "Position X", Title: "Position X",
Type: "string", Description: "X coordinate of the camera's position",
Type: "string",
}, },
"posY": { "posY": {
Title: "Position Y", Title: "Position Y",
Type: "string", Description: "Y coordinate of the camera's position",
Type: "string",
}, },
"posZ": { "posZ": {
Title: "Position Z", Title: "Position Z",
Type: "string", Description: "Z coordinate of the camera's position",
Type: "string",
}, },
"zoom": { "zoom": {
Title: "Zoom", Title: "Zoom",
Type: "string", Description: "zoom level of the camera",
Type: "string",
}, },
"focus": { "focus": {
Title: "Focus", Title: "Focus",
Type: "string", Description: "focus level of the camera",
Type: "string",
}, },
}, },
Required: []string{ Required: []string{
+7 -5
View File
@@ -22,13 +22,15 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"method": { "method": {
Title: "HTTP Method", Title: "HTTP Method",
Type: "string", Description: "method to use for the HTTP request",
Enum: []any{"GET", "POST", "PUT", "PATCH", "DELETE"}, Type: "string",
Enum: []any{"GET", "POST", "PUT", "PATCH", "DELETE"},
}, },
"url": { "url": {
Title: "URL", Title: "URL",
Type: "string", Description: "URL to send the HTTP request to",
Type: "string",
}, },
}, },
Required: []string{"method", "url"}, Required: []string{"method", "url"},
+6 -4
View File
@@ -19,12 +19,14 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"status": { "status": {
Title: "Status Code", Title: "Status Code",
Type: "integer", Description: "status code to set on the response",
Type: "integer",
}, },
"bodyTemplate": { "bodyTemplate": {
Title: "Body Template", Title: "Body Template",
Type: "string", Description: "template for the response body",
Type: "string",
}, },
}, },
Required: []string{"status", "bodyTemplate"}, Required: []string{"status", "bodyTemplate"},
+10 -8
View File
@@ -20,16 +20,18 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"base": { "base": {
Title: "Base", Title: "Base",
Type: "integer", Description: "numerical base to use for parsing the integer",
Enum: []any{0, 2, 8, 10, 16}, Type: "integer",
Default: json.RawMessage("10"), Enum: []any{0, 2, 8, 10, 16},
Default: json.RawMessage("10"),
}, },
"bitSize": { "bitSize": {
Title: "Bit Size", Title: "Bit Size",
Type: "integer", Description: "bit size of the resulting integer",
Enum: []any{0, 8, 16, 32, 64}, Type: "integer",
Default: json.RawMessage("64"), Enum: []any{0, 8, 16, 32, 64},
Default: json.RawMessage("64"),
}, },
}, },
AdditionalProperties: &jsonschema.Schema{Not: &jsonschema.Schema{}}, AdditionalProperties: &jsonschema.Schema{Not: &jsonschema.Schema{}},
+6 -4
View File
@@ -19,12 +19,14 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"min": { "min": {
Title: "Minimum", Title: "Minimum",
Type: "integer", Description: "inclusive minimum value of the random integer",
Type: "integer",
}, },
"max": { "max": {
Title: "Maximum", Title: "Maximum",
Type: "integer", Description: "inclusive maximum value of the random integer",
Type: "integer",
}, },
}, },
Required: []string{"min", "max"}, Required: []string{"min", "max"},
+12 -8
View File
@@ -18,20 +18,24 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"inMin": { "inMin": {
Title: "Input Minimum", Title: "Input Minimum",
Type: "integer", Description: "minimum value of the input integer",
Type: "integer",
}, },
"inMax": { "inMax": {
Title: "Input Maximum", Title: "Input Maximum",
Type: "integer", Description: "maximum value of the input integer",
Type: "integer",
}, },
"outMin": { "outMin": {
Title: "Output Minimum", Title: "Output Minimum",
Type: "integer", Description: "minimum value of the output integer",
Type: "integer",
}, },
"outMax": { "outMax": {
Title: "Output Maximum", Title: "Output Maximum",
Type: "integer", Description: "maximum value of the output integer",
Type: "integer",
}, },
}, },
Required: []string{"inMin", "inMax", "outMin", "outMax"}, Required: []string{"inMin", "inMax", "outMin", "outMax"},
+6 -4
View File
@@ -19,12 +19,14 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"module": { "module": {
Title: "Module ID", Title: "Module ID",
Type: "string", Description: "ID of the key-value module to get the value from",
Type: "string",
}, },
"key": { "key": {
Title: "Key", Title: "Key",
Type: "string", Description: "key to retrieve from the key-value module",
Type: "string",
}, },
}, },
Required: []string{"module", "key"}, Required: []string{"module", "key"},
+6 -4
View File
@@ -19,12 +19,14 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"module": { "module": {
Title: "Module ID", Title: "Module ID",
Type: "string", Description: "ID of the key-value module to set the value in",
Type: "string",
}, },
"key": { "key": {
Title: "Key", Title: "Key",
Type: "string", Description: "key to set in the key-value module",
Type: "string",
}, },
}, },
Required: []string{"module", "key"}, Required: []string{"module", "key"},
@@ -23,16 +23,19 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"channel": { "channel": {
Title: "Channel", Title: "Channel",
Type: "string", Description: "channel number for the control change message",
Type: "string",
}, },
"control": { "control": {
Title: "Control", Title: "Control",
Type: "string", Description: "control number for the control change message",
Type: "string",
}, },
"value": { "value": {
Title: "Value", Title: "Value",
Type: "string", Description: "value for the control change message",
Type: "string",
}, },
}, },
Required: []string{"channel", "control", "value"}, Required: []string{"channel", "control", "value"},
+9 -6
View File
@@ -23,16 +23,19 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"channel": { "channel": {
Title: "Channel", Title: "Channel",
Type: "string", Description: "channel number for the note off message",
Type: "string",
}, },
"note": { "note": {
Title: "Note", Title: "Note",
Type: "string", Description: "note number for the note off message",
Type: "string",
}, },
"velocity": { "velocity": {
Title: "Velocity", Title: "Velocity",
Type: "string", Description: "velocity for the note off message",
Type: "string",
}, },
}, },
Required: []string{"channel", "note", "velocity"}, Required: []string{"channel", "note", "velocity"},
+9 -6
View File
@@ -23,16 +23,19 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"channel": { "channel": {
Title: "Channel", Title: "Channel",
Type: "string", Description: "channel number for the note on message",
Type: "string",
}, },
"note": { "note": {
Title: "Note", Title: "Note",
Type: "string", Description: "note number for the note on message",
Type: "string",
}, },
"velocity": { "velocity": {
Title: "Velocity", Title: "Velocity",
Type: "string", Description: "velocity for the note on message",
Type: "string",
}, },
}, },
Required: []string{"channel", "note", "velocity"}, Required: []string{"channel", "note", "velocity"},
@@ -23,12 +23,14 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"channel": { "channel": {
Title: "Channel", Title: "Channel",
Type: "string", Description: "channel number for the program change message",
Type: "string",
}, },
"program": { "program": {
Title: "Program", Title: "Program",
Type: "string", Description: "program number for the program change message",
Type: "string",
}, },
}, },
Required: []string{"type", "channel", "program"}, Required: []string{"type", "channel", "program"},
+1 -1
View File
@@ -20,8 +20,8 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"module": { "module": {
Title: "Module ID", Title: "Module ID",
Type: "string",
Description: "ID of module to send output to", Description: "ID of module to send output to",
Type: "string",
}, },
}, },
Required: []string{"module"}, Required: []string{"module"},
+9 -6
View File
@@ -23,19 +23,22 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"address": { "address": {
Title: "Address", Title: "Address",
Type: "string", Description: "OSC address for the message",
Type: "string",
}, },
"args": { "args": {
Title: "Arguments", Title: "Arguments",
Type: "array", Description: "arguments for the OSC message",
Type: "array",
Items: &jsonschema.Schema{ Items: &jsonschema.Schema{
Type: "string", Type: "string",
}, },
}, },
"types": { "types": {
Title: "Argument Types", Title: "Argument Types",
Type: "string", Description: "string of OSC types corresponding to the arguments in args",
Type: "string",
}, },
}, },
Required: []string{"address"}, Required: []string{"address"},
+2 -2
View File
@@ -22,13 +22,13 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"module": { "module": {
Title: "Module ID", Title: "Module ID",
Type: "string",
Description: "ID of the module to publish to", Description: "ID of the module to publish to",
Type: "string",
}, },
"topic": { "topic": {
Title: "Topic", Title: "Topic",
Description: "topic to publish to",
Type: "string", Type: "string",
Description: "Topic to publish to",
}, },
}, },
Required: []string{"module", "topic"}, Required: []string{"module", "topic"},
+1 -1
View File
@@ -20,8 +20,8 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"source": { "source": {
Title: "Source", Title: "Source",
Type: "string",
Description: "source to report as to the router", Description: "source to report as to the router",
Type: "string",
}, },
}, },
Required: []string{"source"}, Required: []string{"source"},
+3 -2
View File
@@ -25,8 +25,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"expression": { "expression": {
Title: "Expression", Title: "Expression",
Type: "string", Description: "Expr expression to evaluate",
Type: "string",
}, },
}, },
Required: []string{"expression"}, Required: []string{"expression"},
+3 -2
View File
@@ -18,8 +18,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"program": { "program": {
Title: "Program", Title: "Program",
Type: "string", Description: "JavaScript program to run",
Type: "string",
}, },
}, },
Required: []string{"program"}, Required: []string{"program"},
+11 -8
View File
@@ -20,18 +20,21 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"path": { "path": {
Title: "Path", Title: "Path",
Type: "string", Description: "path to the WASM plugin to load",
Type: "string",
}, },
"function": { "function": {
Title: "Function", Title: "Function",
Type: "string", Description: "exported function to call on the WASM plugin",
Default: json.RawMessage(`"process"`), Type: "string",
Default: json.RawMessage(`"process"`),
}, },
"enableWasi": { "enableWasi": {
Title: "Enable WASI", Title: "Enable WASI",
Type: "boolean", Description: "whether to enable WASI when running the WASM plugin",
Default: json.RawMessage("false"), Type: "boolean",
Default: json.RawMessage("false"),
}, },
}, },
Required: []string{"path"}, Required: []string{"path"},
@@ -19,15 +19,19 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"preWait": { "preWait": {
Title: "Pre Wait (ms)", Title: "Pre Wait (ms)",
Type: "integer", Description: "number of milliseconds to wait before playing the audio",
}, Type: "integer",
"postWait": {
Title: "Post Wait (ms)",
Type: "integer",
}, },
"audioFile": { "audioFile": {
Type: "string", Title: "Audio File",
Description: "path to the audio file to play",
Type: "string",
},
"postWait": {
Title: "Post Wait (ms)",
Description: "number of milliseconds to wait after playing the audio",
Type: "integer",
}, },
}, },
Required: []string{"preWait", "postWait", "audioFile"}, Required: []string{"preWait", "postWait", "audioFile"},
+11 -7
View File
@@ -21,15 +21,19 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"preWait": { "preWait": {
Title: "Pre Wait (ms)", Title: "Pre Wait (ms)",
Type: "integer", Description: "number of milliseconds to wait before sending the DTMF tones",
}, Type: "integer",
"postWait": {
Title: "Post Wait (ms)",
Type: "integer",
}, },
"digits": { "digits": {
Type: "string", Title: "Digits",
Description: "DTMF digits to send",
Type: "string",
},
"postWait": {
Title: "Post Wait (ms)",
Description: "number of milliseconds to wait after sending the DTMF tones",
Type: "integer",
}, },
}, },
Required: []string{"preWait", "postWait", "digits"}, Required: []string{"preWait", "postWait", "digits"},
+3 -2
View File
@@ -19,8 +19,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"template": { "template": {
Title: "Template", Title: "Template",
Type: "string", Description: "template to evaluate",
Type: "string",
}, },
}, },
Required: []string{"template"}, Required: []string{"template"},
+3 -2
View File
@@ -19,8 +19,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"separator": { "separator": {
Title: "Separator", Title: "Separator",
Type: "string", Description: "separator to split the string on",
Type: "string",
}, },
}, },
Required: []string{"separator"}, Required: []string{"separator"},
+3 -2
View File
@@ -19,8 +19,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"name": { "name": {
Title: "Field Name", Title: "Field Name",
Type: "string", Description: "name of the struct field to extract",
Type: "string",
}, },
}, },
Required: []string{"name"}, Required: []string{"name"},
+3 -2
View File
@@ -19,8 +19,9 @@ func init() {
Type: "object", Type: "object",
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"name": { "name": {
Title: "Method Name", Title: "Method Name",
Type: "string", Description: "name of the struct method to extract and call (with no arguments)",
Type: "string",
}, },
}, },
Required: []string{"name"}, Required: []string{"name"},
+1 -1
View File
@@ -19,8 +19,8 @@ func init() {
Properties: map[string]*jsonschema.Schema{ Properties: map[string]*jsonschema.Schema{
"duration": { "duration": {
Title: "Duration", Title: "Duration",
Description: "time to sleep in milliseconds",
Type: "integer", Type: "integer",
Description: "Duration to sleep in milliseconds",
}, },
}, },
Required: []string{"duration"}, Required: []string{"duration"},