1 Commits

Author SHA1 Message Date
renovate[bot] a3e1a0546c Update dependency typescript to v7 2026-08-26 14:28:48 +00:00
12 changed files with 1339 additions and 1666 deletions
+1 -1
View File
@@ -1 +1 @@
24.20.0
v24.19.0
+50
View File
@@ -96,6 +96,22 @@ export default defineConfig({
collapsed: true,
items: [{ autogenerate: { directory: "modules/serial" } }],
},
{
label: "SIP",
collapsed: true,
items: [
{
label: "Call",
collapsed: true,
items: [{ autogenerate: { directory: "modules/sip/call" } }],
},
{
label: "DTMF",
collapsed: true,
items: [{ autogenerate: { directory: "modules/sip/dtmf" } }],
},
],
},
{
label: "WebSocket",
collapsed: true,
@@ -248,6 +264,40 @@ export default defineConfig({
collapsed: true,
items: [{ autogenerate: { directory: "processors/script" } }],
},
{
label: "SIP",
collapsed: true,
items: [
{
label: "Response",
collapsed: true,
items: [
{
label: "Audio",
collapsed: true,
items: [
{
autogenerate: {
directory: "processors/sip/response/audio",
},
},
],
},
{
label: "DTMF",
collapsed: true,
items: [
{
autogenerate: {
directory: "processors/sip/response/dtmf",
},
},
],
},
],
},
],
},
{
label: "String",
collapsed: true,
+122 -17
View File
@@ -1,16 +1,16 @@
{
"name": "@showbridge/docs",
"version": "0.6.0",
"version": "0.5.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@showbridge/docs",
"version": "0.6.0",
"version": "0.5.1",
"devDependencies": {
"@astrojs/check": "0.9.10",
"@astrojs/starlight": "0.41.10",
"astro": "7.2.9",
"@astrojs/starlight": "0.41.9",
"astro": "7.2.7",
"sharp": "0.35.4",
"typescript": "6.0.3"
}
@@ -617,9 +617,9 @@
}
},
"node_modules/@astrojs/starlight": {
"version": "0.41.10",
"resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.10.tgz",
"integrity": "sha512-xE+OO2zzJkHPzc+giuFj+1c0sYw3//goo31PEksguNTd3XpXvV7TaJ0TzQzBUSCxYtBwWjAPkJfqR2W4aMQdhQ==",
"version": "0.41.9",
"resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.9.tgz",
"integrity": "sha512-c76+isiSQzJRRnkT7JqUqqM/2Rg+fKhtA08zRe06EJRgqsW4WEJ+MtySIOjXc59oO1aGbVZRbxiBfYp72zsVpw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3033,9 +3033,9 @@
}
},
"node_modules/astro": {
"version": "7.2.9",
"resolved": "https://registry.npmjs.org/astro/-/astro-7.2.9.tgz",
"integrity": "sha512-o5nZFo/bieF6rp4x9sQSLhI7GO7Bahpld38Y4LvX27nFoxNiuttjI+Hea81w5ksORLHgdPUlQpU9obPz5QRa8g==",
"version": "7.2.7",
"resolved": "https://registry.npmjs.org/astro/-/astro-7.2.7.tgz",
"integrity": "sha512-+XW7Z1x03hq/zV8tiEnvS8E7JYKo5iyYVPJFt5RhEj3dOE+zSwhVaUabcqNsEDVJcneQX2mqxo4fPgoSO+Jc2w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3058,7 +3058,7 @@
"dset": "^3.1.4",
"es-module-lexer": "^2.0.0",
"esbuild": "^0.28.0",
"find-proc": "0.1.0",
"find-process": "^2.1.1",
"flattie": "^1.1.1",
"fontace": "~0.4.1",
"get-tsconfig": "5.0.0-beta.4",
@@ -3106,7 +3106,7 @@
"url": "https://opencollective.com/astrodotbuild"
},
"optionalDependencies": {
"sharp": "^0.35.4"
"sharp": "^0.34.0 || ^0.35.0"
},
"peerDependencies": {
"@astrojs/markdown-remark": "7.2.4"
@@ -3227,6 +3227,39 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/chalk/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/character-entities": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
@@ -3353,6 +3386,26 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"license": "MIT"
},
"node_modules/comma-separated-tokens": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
@@ -4009,14 +4062,29 @@
}
}
},
"node_modules/find-proc": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.1.0.tgz",
"integrity": "sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==",
"node_modules/find-process": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/find-process/-/find-process-2.1.1.tgz",
"integrity": "sha512-SrQDx3QhlmHM90iqn9rdjCQcw/T+WlpOkHFsjoRgB+zTpDfltNA1VSNYeYELwhUTJy12UFxqjWhmhOrJc+o4sA==",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "~4.1.2",
"commander": "^14.0.3",
"loglevel": "^1.9.2"
},
"bin": {
"find-process": "dist/cjs/bin/find-process.js"
}
},
"node_modules/find-process/node_modules/commander": {
"version": "14.0.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
"integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^20.19.0 || >=22.12.0"
"node": ">=20"
}
},
"node_modules/flattie": {
@@ -4130,6 +4198,16 @@
"uncrypto": "^0.1.3"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/hast-util-embedded": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz",
@@ -5056,6 +5134,20 @@
"url": "https://opencollective.com/parcel"
}
},
"node_modules/loglevel": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
"integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
},
"funding": {
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/loglevel"
}
},
"node_modules/longest-streak": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
@@ -7371,6 +7463,19 @@
"inline-style-parser": "0.2.7"
}
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/svgo": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz",
+5 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@showbridge/docs",
"type": "module",
"version": "0.6.0",
"version": "0.5.1",
"files": [
"dist"
],
@@ -15,9 +15,9 @@
},
"devDependencies": {
"@astrojs/check": "0.9.10",
"@astrojs/starlight": "0.41.10",
"astro": "7.2.9",
"@astrojs/starlight": "0.41.9",
"astro": "7.2.7",
"sharp": "0.35.4",
"typescript": "6.0.3"
"typescript": "7.0.2"
}
}
}
+41
View File
@@ -0,0 +1,41 @@
---
title: SIP > OSC
sidebar:
order: 2
---
import { Code } from "@astrojs/starlight/components";
This config starts an SIP server listening on port `5060`. Any incoming call will result in a OSC message being sent to `127.0.0.1:53000` with the address set to [fire a QLab cue](https://qlab.app/docs/v5/scripting/osc-dictionary-v5/#/cue/{cue_number}/go) with the dialed number as the cue number. This was tested with a cheap SIP gateway like [this one](https://www.grandstream.com/products/gateways-and-atas/analog-telephone-adaptors/product/ht802).
export const example = `
api:
enabled: true
port: 8080
modules:
- id: sip
type: sip.call.server
params:
port: 5060
- id: udp
type: net.udp.client
params:
host: 127.0.0.1
port: 53000
routes:
- id: sip-to-osc
input: sip
processors:
- id: create-osc-message
type: osc.message.create
params:
address: "/cue/{{.Payload.To}}/go"
- id: encode-osc-message
type: osc.message.encode
- id: send-osc
type: module.output
params:
module: udp
`;
<Code code={example} title="config.yaml" lang="yaml" />
@@ -0,0 +1,24 @@
---
title: SIP Call Server
sidebar:
label: Server
order: 1
---
import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This module starts a [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) server that listens for incoming connections and emits call events when a new call is received. This can be used with cheap SIP gateway devices to connect an analog phone line and do interesting things like [firing QLab cues with phone calls](/examples/dial-a-cue).
<SchemaInfo type="module" id="sip.call.server"></SchemaInfo>
### Example
Start a UDP SIP server listening on port 5060
```yaml
- id: sipCallServer
type: sip.call.server
params:
ip: 127.0.0.1
port: 5060
transport: udp
```
@@ -0,0 +1,25 @@
---
title: SIP DTMF Server
sidebar:
label: Server
order: 1
---
import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This module starts a [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) server that listens for incoming connections. When a call is received this module will emit events based on the touch tones (DTMF) received during the call. The event is sent out whenever the use presses the separator key defined in the params.
<SchemaInfo type="module" id="sip.dtmf.server"></SchemaInfo>
### Example
Start a UDP SIP server listening on port 5060 that will emit events whenever the user presses the `#` key on their phone during a call
```yaml
- id: sipDTMFServer
type: sip.dtmf.server
params:
ip: 127.0.0.1
port: 5060
transport: udp
separator: "#"
```
@@ -0,0 +1,24 @@
---
title: Create SIP Audio Response
sidebar:
label: Create
order: 1
---
import SchemaInfo from '../../../../../../components/SchemaInfo.astro';
This processor will create a SIP response message with an audio file as the payload. If this message is output to a SIP module using the [module.output](/processors/module/output) processor, then the SIP module will send the response to the caller and play the audio file included in the response.
<SchemaInfo type="processor" id="sip.response.audio.create"/>
### Example
This example will create a SIP response that will wait 1 second then play `response.wav` then wait another second before completing the response.
```yaml
- id: create-audio-response
type: sip.response.audio.create
params:
preWait: 1000
audioFile: "response.wav"
postWait: 1000
```
@@ -0,0 +1,24 @@
---
title: Create SIP DTMF Response
sidebar:
label: Create
order: 1
---
import SchemaInfo from '../../../../../../components/SchemaInfo.astro';
This processor will create a SIP DTMF response from the provided parameters. If this message is output to a SIP module using the [module.output](/processors/module/output) processor, then the SIP module will send the response to the caller and play the DTMF tones specified.
<SchemaInfo type="processor" id="sip.response.dtmf.create"/>
### Example
This example will create a SIP response that will wait 1 second then play the DTMF digits "1234" then wait another second before completing the response.
```yaml
- id: create-dtmf-response
type: sip.response.dtmf.create
params:
preWait: 1000
digits: "1234"
postWait: 1000
```
+3
View File
@@ -25,6 +25,9 @@ showbridge is a kind of re-imagining of [OSCulator](https://osculator.net/) take
- server
- [PosiStageNet](https://posistage.net/)
- client
- [SIP](https://datatracker.ietf.org/doc/html/rfc3261)
- call server
- [DTMF](https://en.wikipedia.org/wiki/DTMF_signaling) server
- MIDI
- input (not included in pre-built binaries yet)
- output (not included in pre-built binaries yet)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff