speechflow 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/etc/claude.md +9 -4
  4. package/etc/keyfiles.txt +19 -0
  5. package/etc/speechflow.yaml +4 -4
  6. package/package.json +3 -3
  7. package/speechflow-cli/dst/speechflow-main-api.d.ts +12 -0
  8. package/speechflow-cli/dst/speechflow-main-api.js +319 -0
  9. package/speechflow-cli/dst/speechflow-main-api.js.map +1 -0
  10. package/speechflow-cli/dst/speechflow-main-cli.d.ts +28 -0
  11. package/speechflow-cli/dst/speechflow-main-cli.js +271 -0
  12. package/speechflow-cli/dst/speechflow-main-cli.js.map +1 -0
  13. package/speechflow-cli/dst/speechflow-main-config.d.ts +9 -0
  14. package/speechflow-cli/dst/speechflow-main-config.js +27 -0
  15. package/speechflow-cli/dst/speechflow-main-config.js.map +1 -0
  16. package/speechflow-cli/dst/speechflow-main-graph.d.ts +34 -0
  17. package/speechflow-cli/dst/speechflow-main-graph.js +365 -0
  18. package/speechflow-cli/dst/speechflow-main-graph.js.map +1 -0
  19. package/speechflow-cli/dst/speechflow-main-nodes.d.ts +10 -0
  20. package/speechflow-cli/dst/speechflow-main-nodes.js +60 -0
  21. package/speechflow-cli/dst/speechflow-main-nodes.js.map +1 -0
  22. package/speechflow-cli/dst/speechflow-main-status.d.ts +11 -0
  23. package/speechflow-cli/dst/speechflow-main-status.js +60 -0
  24. package/speechflow-cli/dst/speechflow-main-status.js.map +1 -0
  25. package/speechflow-cli/dst/speechflow-main.d.ts +7 -0
  26. package/speechflow-cli/dst/speechflow-main.js +127 -0
  27. package/speechflow-cli/dst/speechflow-main.js.map +1 -0
  28. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +4 -4
  29. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -1
  30. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +5 -6
  31. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
  32. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +5 -5
  33. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -1
  34. package/speechflow-cli/dst/speechflow-node-a2a-expander.js +5 -6
  35. package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
  36. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +5 -5
  37. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  38. package/speechflow-cli/dst/speechflow-node-a2a-filler.js +3 -3
  39. package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
  40. package/speechflow-cli/dst/speechflow-node-a2a-gain.js +2 -2
  41. package/speechflow-cli/dst/speechflow-node-a2a-gain.js.map +1 -1
  42. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +4 -4
  43. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  44. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +2 -2
  45. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
  46. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +4 -4
  47. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
  48. package/speechflow-cli/dst/speechflow-node-a2a-speex.js +4 -4
  49. package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
  50. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +4 -4
  51. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  52. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js +6 -6
  53. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -1
  54. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +4 -4
  55. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  56. package/speechflow-cli/dst/speechflow-node-a2t-openai.js +4 -4
  57. package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -1
  58. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js +2 -2
  59. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -1
  60. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +2 -2
  61. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  62. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js +2 -2
  63. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js.map +1 -1
  64. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +2 -2
  65. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -1
  66. package/speechflow-cli/dst/speechflow-node-t2t-google.js +5 -5
  67. package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
  68. package/speechflow-cli/dst/speechflow-node-t2t-modify.js +2 -2
  69. package/speechflow-cli/dst/speechflow-node-t2t-modify.js.map +1 -1
  70. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +2 -2
  71. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -1
  72. package/speechflow-cli/dst/speechflow-node-t2t-openai.js +2 -2
  73. package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -1
  74. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +2 -2
  75. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
  76. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +2 -2
  77. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  78. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +2 -2
  79. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -1
  80. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +2 -2
  81. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
  82. package/speechflow-cli/dst/speechflow-node-xio-device.js +5 -5
  83. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
  84. package/speechflow-cli/dst/speechflow-node-xio-file.js +27 -27
  85. package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
  86. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +4 -4
  87. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
  88. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +7 -7
  89. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
  90. package/speechflow-cli/dst/{speechflow-utils-audio-wt.js → speechflow-util-audio-wt.js} +1 -1
  91. package/speechflow-cli/dst/speechflow-util-audio-wt.js.map +1 -0
  92. package/speechflow-cli/dst/speechflow-util-audio.d.ts +22 -0
  93. package/speechflow-cli/dst/speechflow-util-audio.js +251 -0
  94. package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -0
  95. package/speechflow-cli/dst/speechflow-util-error.d.ts +14 -0
  96. package/speechflow-cli/dst/speechflow-util-error.js +131 -0
  97. package/speechflow-cli/dst/speechflow-util-error.js.map +1 -0
  98. package/speechflow-cli/dst/speechflow-util-queue.d.ts +68 -0
  99. package/speechflow-cli/dst/speechflow-util-queue.js +338 -0
  100. package/speechflow-cli/dst/speechflow-util-queue.js.map +1 -0
  101. package/speechflow-cli/dst/speechflow-util-stream.d.ts +18 -0
  102. package/speechflow-cli/dst/speechflow-util-stream.js +219 -0
  103. package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -0
  104. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js +124 -0
  105. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js.map +1 -0
  106. package/speechflow-cli/dst/{speechflow-utils-audio.js → speechflow-util-webaudio.js} +2 -2
  107. package/speechflow-cli/dst/speechflow-util-webaudio.js.map +1 -0
  108. package/speechflow-cli/dst/speechflow-util.d.ts +4 -0
  109. package/speechflow-cli/dst/speechflow-util.js +26 -0
  110. package/speechflow-cli/dst/speechflow-util.js.map +1 -0
  111. package/speechflow-cli/dst/speechflow.js +3 -912
  112. package/speechflow-cli/dst/speechflow.js.map +1 -1
  113. package/speechflow-cli/etc/oxlint.jsonc +4 -1
  114. package/speechflow-cli/package.json +1 -0
  115. package/speechflow-cli/src/lib.d.ts +2 -0
  116. package/speechflow-cli/src/speechflow-main-api.ts +315 -0
  117. package/speechflow-cli/src/speechflow-main-cli.ts +259 -0
  118. package/speechflow-cli/src/speechflow-main-config.ts +17 -0
  119. package/speechflow-cli/src/speechflow-main-graph.ts +370 -0
  120. package/speechflow-cli/src/speechflow-main-nodes.ts +61 -0
  121. package/speechflow-cli/src/speechflow-main-status.ts +70 -0
  122. package/speechflow-cli/src/speechflow-main.ts +106 -0
  123. package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +4 -4
  124. package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +5 -6
  125. package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +5 -5
  126. package/speechflow-cli/src/speechflow-node-a2a-expander.ts +5 -6
  127. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +5 -5
  128. package/speechflow-cli/src/speechflow-node-a2a-filler.ts +4 -4
  129. package/speechflow-cli/src/speechflow-node-a2a-gain.ts +2 -2
  130. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +4 -4
  131. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +2 -2
  132. package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +4 -4
  133. package/speechflow-cli/src/speechflow-node-a2a-speex.ts +4 -4
  134. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +4 -4
  135. package/speechflow-cli/src/speechflow-node-a2t-amazon.ts +7 -7
  136. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +5 -5
  137. package/speechflow-cli/src/speechflow-node-a2t-openai.ts +5 -5
  138. package/speechflow-cli/src/speechflow-node-t2a-amazon.ts +2 -2
  139. package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +2 -2
  140. package/speechflow-cli/src/speechflow-node-t2t-amazon.ts +2 -2
  141. package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +2 -2
  142. package/speechflow-cli/src/speechflow-node-t2t-google.ts +5 -5
  143. package/speechflow-cli/src/speechflow-node-t2t-modify.ts +2 -2
  144. package/speechflow-cli/src/speechflow-node-t2t-ollama.ts +2 -2
  145. package/speechflow-cli/src/speechflow-node-t2t-openai.ts +2 -2
  146. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +2 -2
  147. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +2 -2
  148. package/speechflow-cli/src/speechflow-node-t2t-transformers.ts +2 -2
  149. package/speechflow-cli/src/speechflow-node-x2x-filter.ts +2 -2
  150. package/speechflow-cli/src/speechflow-node-xio-device.ts +5 -5
  151. package/speechflow-cli/src/speechflow-node-xio-file.ts +9 -10
  152. package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +5 -5
  153. package/speechflow-cli/src/speechflow-node-xio-websocket.ts +7 -7
  154. package/speechflow-cli/src/{speechflow-utils-audio.ts → speechflow-util-audio.ts} +131 -1
  155. package/speechflow-cli/src/speechflow-util-error.ts +184 -0
  156. package/speechflow-cli/src/speechflow-util-queue.ts +320 -0
  157. package/speechflow-cli/src/speechflow-util-stream.ts +197 -0
  158. package/speechflow-cli/src/speechflow-util.ts +10 -0
  159. package/speechflow-cli/src/speechflow.ts +3 -953
  160. package/speechflow-ui-db/dst/index.js +1 -1
  161. package/speechflow-ui-db/etc/vite-client.mts +0 -2
  162. package/speechflow-ui-db/src/app.vue +20 -19
  163. package/speechflow-ui-st/dst/index.js +1 -1
  164. package/speechflow-ui-st/etc/vite-client.mts +0 -2
  165. package/speechflow-ui-st/src/app.vue +10 -6
  166. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js +0 -208
  167. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js.map +0 -1
  168. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.d.ts +0 -15
  169. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js +0 -312
  170. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js.map +0 -1
  171. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.d.ts +0 -18
  172. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js +0 -312
  173. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js.map +0 -1
  174. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.d.ts +0 -19
  175. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js +0 -351
  176. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js.map +0 -1
  177. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.d.ts +0 -16
  178. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js +0 -204
  179. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js.map +0 -1
  180. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.d.ts +0 -13
  181. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js +0 -175
  182. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js.map +0 -1
  183. package/speechflow-cli/dst/speechflow-utils-audio-wt.js.map +0 -1
  184. package/speechflow-cli/dst/speechflow-utils-audio.js.map +0 -1
  185. package/speechflow-cli/dst/speechflow-utils.d.ts +0 -108
  186. package/speechflow-cli/dst/speechflow-utils.js +0 -746
  187. package/speechflow-cli/dst/speechflow-utils.js.map +0 -1
  188. package/speechflow-cli/src/speechflow-utils.ts +0 -810
  189. /package/speechflow-cli/dst/{speechflow-node-a2a-dynamics-wt.d.ts → speechflow-util-audio-wt.d.ts} +0 -0
  190. /package/speechflow-cli/dst/{speechflow-utils-audio-wt.d.ts → speechflow-util-webaudio-wt.d.ts} +0 -0
  191. /package/speechflow-cli/dst/{speechflow-utils-audio.d.ts → speechflow-util-webaudio.d.ts} +0 -0
  192. /package/speechflow-cli/src/{speechflow-utils-audio-wt.ts → speechflow-util-audio-wt.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
  ChangeLog
3
3
  =========
4
4
 
5
+ 1.6.2 (2025-09-07)
6
+ ------------------
7
+
8
+ - CLEANUP: cleanup code
9
+
10
+ 1.6.1 (2025-09-06)
11
+ ------------------
12
+
13
+ - CLEANUP: cleanup code
14
+ - REFACTOR: splitted large utils code
15
+ - REFACTOR: splitted large main code
16
+
5
17
  1.6.0 (2025-09-06)
6
18
  ------------------
7
19
 
package/README.md CHANGED
@@ -769,7 +769,7 @@ The following nodes process text chunks only.
769
769
  | **src** | 0 | "de" | `/^(?:de\|en)$/` |
770
770
  | **dst** | 1 | "en" | `/^(?:de\|en)$/` |
771
771
  | **key** | *none* | env.SPEECHFLOW\_OPENAI\_KEY | *none* |
772
- | **model** | *none* | "gpt-4o-mini" | *none* |
772
+ | **model** | *none* | "gpt-5-mini" | *none* |
773
773
 
774
774
  - Node: **t2t-ollama**<br/>
775
775
  Purpose: **Ollama/Gemma Text-to-Text translation and spelling correction**<br/>
package/etc/claude.md CHANGED
@@ -46,14 +46,18 @@ npm start test # Run test configuration with sample pipeline
46
46
  ## Key Implementation Files
47
47
 
48
48
  ### Core Engine
49
- - `speechflow-cli/src/speechflow.ts` - Main CLI entry point and orchestration
50
- - `speechflow-cli/src/speechflow-node.ts` - Base node class with stream processing
51
- - `speechflow-cli/src/speechflow-utils.ts` - Utility functions and helpers
49
+
50
+ - `speechflow-cli/src/speechflow.ts` -- CLI entry point
51
+ - `speechflow-cli/src/speechflow-main*.ts` -- Main program and orchestration
52
+ - `speechflow-cli/src/speechflow-node*.ts` -- Base node classes with stream processing
53
+ - `speechflow-cli/src/speechflow-util*.ts` -- Utility functions and helpers
52
54
 
53
55
  ### Node Implementations
56
+
54
57
  All node implementations follow the pattern `speechflow-node-{category}-{name}.ts` in `speechflow-cli/src/`.
55
58
 
56
59
  ### Stream Processing Architecture
60
+
57
61
  - Uses Node.js object-mode streams with timestamp metadata
58
62
  - Audio chunks: PCM format, 16-bit, 16kHz, mono
59
63
  - Text chunks: Include timing information and metadata (gender, final/interim)
@@ -104,4 +108,5 @@ This executes a sample pipeline defined in `etc/speechflow.yaml` with dashboard
104
108
  1. **Stream Processing**: All nodes extend `SpeechFlowNode` and implement `process()` method for stream transformation
105
109
  2. **Error Handling**: Nodes emit errors via stream events, captured and logged centrally
106
110
  3. **Timestamp Preservation**: Audio/text chunks maintain timing for synchronization across pipeline
107
- 4. **Meta Information**: Chunks carry metadata (gender, final/interim status) for downstream filtering
111
+ 4. **Meta Information**: Chunks carry metadata (gender, final/interim status) for downstream filtering
112
+
@@ -0,0 +1,19 @@
1
+
2
+ speechflow-cli/etc/stx.conf
3
+
4
+ speechflow-cli/src/speechflow-main.ts
5
+ speechflow-cli/src/speechflow-main-cli.ts
6
+ speechflow-cli/src/speechflow-main-nodes.ts
7
+ speechflow-cli/src/speechflow-main-graph.ts
8
+
9
+ speechflow-cli/src/speechflow-node.ts
10
+ speechflow-cli/src/speechflow-node-a2a-gain.ts
11
+
12
+ speechflow-cli/src/speechflow-util-audio.ts
13
+ speechflow-cli/src/speechflow-util-error.ts
14
+ speechflow-cli/src/speechflow-util-queue.ts
15
+ speechflow-cli/src/speechflow-util-stream.ts
16
+
17
+ speechflow-ui-db/src/app.vue
18
+ speechflow-ui-st/src/app.vue
19
+
@@ -84,10 +84,10 @@ studio-translation: |
84
84
  a2a-meter(interval: 250, dashboard: "meter1") |
85
85
  a2a-wav(mode: "encode") |
86
86
  xio-file(path: "program-de.wav", mode: "w", type: "audio"),
87
- a2t-deepgram(language: "de", key: interim: true) | {
88
- x2x-trace(name: "trace1", type: "text", dashboard: "text1")
89
- t2t-subtitle(format: "vtt", words: true) |
90
- xio-file(path: "program-de.vtt", mode: "w", type: "text"),
87
+ a2t-deepgram(language: "de", interim: true) | {
88
+ x2x-trace(name: "trace1", type: "text", dashboard: "text1") |
89
+ t2t-subtitle(format: "vtt", words: true) |
90
+ xio-file(path: "program-de.vtt", mode: "w", type: "text"),
91
91
  t2t-sentence() | {
92
92
  x2x-trace(name: "trace2", type: "text", notify: true, dashboard: "text2") |
93
93
  t2t-format(width: 80) |
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "speechflow",
3
- "version": "1.6.0",
4
- "x-stdver": "1.6.0-GA",
5
- "x-release": "2025-09-06",
3
+ "version": "1.6.2",
4
+ "x-stdver": "1.6.2-GA",
5
+ "x-release": "2025-09-07",
6
6
  "homepage": "https://github.com/rse/speechflow",
7
7
  "description": "Speech Processing Flow Graph",
8
8
  "keywords": [ "speech", "audio", "flow", "graph" ],
@@ -0,0 +1,12 @@
1
+ import CLIio from "cli-io";
2
+ import { CLIOptions } from "./speechflow-main-cli";
3
+ import { NodeGraph } from "./speechflow-main-graph";
4
+ export declare class APIServer {
5
+ private cli;
6
+ private wsPeers;
7
+ private hapi;
8
+ private sendOSC;
9
+ constructor(cli: CLIio);
10
+ start(args: CLIOptions, graph: NodeGraph): Promise<void>;
11
+ stop(args: CLIOptions): Promise<void>;
12
+ }
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ /*
3
+ ** SpeechFlow - Speech Processing Flow Graph
4
+ ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
+ ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.APIServer = void 0;
45
+ /* standard dependencies */
46
+ const node_path_1 = __importDefault(require("node:path"));
47
+ /* external dependencies */
48
+ const HAPI = __importStar(require("@hapi/hapi"));
49
+ const inert_1 = __importDefault(require("@hapi/inert"));
50
+ const ws_1 = __importDefault(require("ws"));
51
+ const hapi_plugin_websocket_1 = __importDefault(require("hapi-plugin-websocket"));
52
+ const hapi_plugin_header_1 = __importDefault(require("hapi-plugin-header"));
53
+ const osc_js_1 = __importDefault(require("osc-js"));
54
+ const arktype = __importStar(require("arktype"));
55
+ /* internal dependencies */
56
+ const util = __importStar(require("./speechflow-util"));
57
+ const package_json_1 = __importDefault(require("../../package.json"));
58
+ /* Application Programming Interface (API) server management class */
59
+ class APIServer {
60
+ cli;
61
+ /* internal state */
62
+ wsPeers = new Map();
63
+ hapi = null;
64
+ sendOSC = null;
65
+ /* creation */
66
+ constructor(cli) {
67
+ this.cli = cli;
68
+ }
69
+ /* start API server service */
70
+ async start(args, graph) {
71
+ /* define external request/response structure */
72
+ const requestValidator = arktype.type({
73
+ request: "string",
74
+ node: "string",
75
+ args: "unknown[]"
76
+ });
77
+ /* forward external request to target node in graph */
78
+ const consumeExternalRequest = async (_req) => {
79
+ const req = requestValidator(_req);
80
+ if (req instanceof arktype.type.errors)
81
+ throw new Error(`invalid request: ${req.summary}`);
82
+ if (req.request !== "COMMAND")
83
+ throw new Error("invalid external request (command expected)");
84
+ const name = req.node;
85
+ const argList = req.args;
86
+ const foundNode = graph.findGraphNode(name);
87
+ if (foundNode === undefined) {
88
+ this.cli.log("warning", `external request failed: no such node <${name}>`);
89
+ throw new Error(`external request failed: no such node <${name}>`);
90
+ }
91
+ else {
92
+ await Promise.race([
93
+ foundNode.receiveRequest(argList),
94
+ new Promise((resolve, reject) => setTimeout(() => reject(new Error("timeout")), 10 * 1000))
95
+ ]).catch((err) => {
96
+ this.cli.log("warning", `external request to node <${name}> failed: ${err.message}`);
97
+ });
98
+ }
99
+ };
100
+ /* establish REST/WebSocket API */
101
+ this.hapi = new HAPI.Server({
102
+ address: args.a,
103
+ port: args.p
104
+ });
105
+ await this.hapi.register({ plugin: inert_1.default });
106
+ await this.hapi.register({ plugin: hapi_plugin_header_1.default, options: { Server: `${package_json_1.default.name}/${package_json_1.default.version}` } });
107
+ await this.hapi.register({ plugin: hapi_plugin_websocket_1.default });
108
+ this.hapi.events.on("response", (request) => {
109
+ let protocol = `HTTP/${request.raw.req.httpVersion}`;
110
+ const ws = request.websocket();
111
+ if (ws.mode === "websocket") {
112
+ const wsVersion = ws.ws.protocolVersion ??
113
+ request.headers["sec-websocket-version"] ?? "13?";
114
+ protocol = `WebSocket/${wsVersion}+${protocol}`;
115
+ }
116
+ const msg = "remote=" + request.info.remoteAddress + ", " +
117
+ "method=" + request.method.toUpperCase() + ", " +
118
+ "url=" + request.url.pathname + ", " +
119
+ "protocol=" + protocol + ", " +
120
+ "response=" + ("statusCode" in request.response ? request.response.statusCode : "<unknown>");
121
+ this.cli.log("info", `HAPI: request: ${msg}`);
122
+ });
123
+ this.hapi.events.on({ name: "request", channels: ["error"] }, (request, event, tags) => {
124
+ if (event.error instanceof Error)
125
+ this.cli.log("error", `HAPI: request-error: ${event.error.message}`);
126
+ else
127
+ this.cli.log("error", `HAPI: request-error: ${event.error}`);
128
+ });
129
+ this.hapi.events.on("log", (event, tags) => {
130
+ if (tags.error) {
131
+ const err = event.error;
132
+ if (err instanceof Error)
133
+ this.cli.log("error", `HAPI: log: ${err.message}`);
134
+ else
135
+ this.cli.log("error", `HAPI: log: ${err}`);
136
+ }
137
+ });
138
+ /* define REST/WebSocket API endpoints */
139
+ this.hapi.route({
140
+ method: "GET",
141
+ path: "/{param*}",
142
+ handler: {
143
+ directory: {
144
+ path: node_path_1.default.join(__dirname, "../../speechflow-ui-db/dst"),
145
+ redirectToSlash: true,
146
+ index: true
147
+ }
148
+ }
149
+ });
150
+ this.hapi.route({
151
+ method: "GET",
152
+ path: "/api/dashboard",
153
+ handler: (request, h) => {
154
+ const config = [];
155
+ for (const block of args.d.split(",")) {
156
+ const [type, id, name] = block.split(":");
157
+ config.push({ type, id, name });
158
+ }
159
+ return h.response(config).code(200);
160
+ }
161
+ });
162
+ this.hapi.route({
163
+ method: "GET",
164
+ path: "/api/{req}/{node}/{params*}",
165
+ options: {},
166
+ handler: (request, h) => {
167
+ const peer = request.info.remoteAddress;
168
+ const params = request.params.params ?? "";
169
+ if (params.length > 1000)
170
+ return h.response({ response: "ERROR", data: "parameters too long" }).code(400);
171
+ const req = {
172
+ request: request.params.req,
173
+ node: request.params.node,
174
+ args: params.split("/").filter((seg) => seg !== "")
175
+ };
176
+ this.cli.log("info", `HAPI: peer ${peer}: GET: ${JSON.stringify(req)}`);
177
+ return consumeExternalRequest(req)
178
+ .then(() => h.response({ response: "OK" }).code(200))
179
+ .catch((error) => h.response({ response: "ERROR", data: util.ensureError(error).message }).code(417));
180
+ }
181
+ });
182
+ this.hapi.route({
183
+ method: "POST",
184
+ path: "/api",
185
+ options: {
186
+ payload: {
187
+ output: "data",
188
+ parse: true,
189
+ allow: "application/json",
190
+ maxBytes: 1 * 1024 * 1024
191
+ },
192
+ plugins: {
193
+ websocket: {
194
+ autoping: 30 * 1000,
195
+ connect: (argList) => {
196
+ const ctx = argList.ctx;
197
+ const ws = argList.ws;
198
+ const req = argList.req;
199
+ const peer = `${req.socket.remoteAddress}:${req.socket.remotePort}`;
200
+ ctx.peer = peer;
201
+ this.wsPeers.set(peer, { ctx, ws, req });
202
+ this.cli.log("info", `HAPI: WebSocket: connect: peer ${peer}`);
203
+ },
204
+ disconnect: (argList) => {
205
+ const ctx = argList.ctx;
206
+ const ws = argList.ws;
207
+ const peer = ctx.peer;
208
+ this.wsPeers.delete(peer);
209
+ ws.removeAllListeners();
210
+ if (ws.readyState === ws_1.default.OPEN)
211
+ ws.close();
212
+ this.cli.log("info", `HAPI: WebSocket: disconnect: peer ${peer}`);
213
+ }
214
+ }
215
+ }
216
+ },
217
+ handler: (request, h) => {
218
+ /* on WebSocket message transfer */
219
+ const peer = request.info.remoteAddress;
220
+ const req = requestValidator(request.payload);
221
+ if (req instanceof arktype.type.errors)
222
+ return h.response({ response: "ERROR", data: `invalid request: ${req.summary}` }).code(417);
223
+ this.cli.log("info", `HAPI: peer ${peer}: POST: ${JSON.stringify(req)}`);
224
+ return consumeExternalRequest(req)
225
+ .then(() => h.response({ response: "OK" }).code(200))
226
+ .catch((err) => h.response({ response: "ERROR", data: err.message }).code(417));
227
+ }
228
+ });
229
+ /* start up REST/WebSockets service */
230
+ await this.hapi.start();
231
+ this.cli.log("info", `HAPI: started REST/WebSocket network service: http://${args.a}:${args.p}`);
232
+ /* hook for sendResponse method of nodes */
233
+ for (const node of graph.getGraphNodes()) {
234
+ node.on("send-response", (argList) => {
235
+ const data = JSON.stringify({ response: "NOTIFY", node: node.id, args: argList });
236
+ for (const [peer, info] of this.wsPeers.entries()) {
237
+ this.cli.log("debug", `HAPI: remote peer ${peer}: sending ${data}`);
238
+ if (info.ws.readyState === ws_1.default.OPEN)
239
+ info.ws.send(data);
240
+ }
241
+ });
242
+ }
243
+ /* establish Open State Control (OSC) event emission */
244
+ if (args.o !== "") {
245
+ const osc = new osc_js_1.default({ plugin: new osc_js_1.default.DatagramPlugin({ type: "udp4" }) });
246
+ const m = args.o.match(/^(.+?):(\d+)$/);
247
+ if (m === null)
248
+ throw new Error("invalid OSC/UDP endpoint (expected <ip-adress>:<udp-port>)");
249
+ const host = m[1];
250
+ const port = m[2];
251
+ this.sendOSC = (url, ...argList) => {
252
+ const msg = new osc_js_1.default.Message(url, ...argList);
253
+ osc.send(msg, { host, port });
254
+ };
255
+ }
256
+ /* hook for send-dashboard method of nodes */
257
+ for (const node of graph.getGraphNodes()) {
258
+ node.on("send-dashboard", (info) => {
259
+ const data = JSON.stringify({
260
+ response: "DASHBOARD",
261
+ node: "",
262
+ args: [info.type, info.id, info.kind, info.value]
263
+ });
264
+ for (const [peer, info] of this.wsPeers.entries()) {
265
+ this.cli.log("debug", `HAPI: dashboard peer ${peer}: send ${data}`);
266
+ info.ws.send(data);
267
+ }
268
+ for (const n of graph.getGraphNodes()) {
269
+ Promise.race([
270
+ n.receiveDashboard(info.type, info.id, info.kind, info.value),
271
+ new Promise((resolve, reject) => setTimeout(() => reject(new Error("timeout")), 10 * 1000))
272
+ ]).catch((err) => {
273
+ this.cli.log("warning", `sending dashboard info to node <${n.id}> failed: ${err.message}`);
274
+ });
275
+ }
276
+ if (args.o !== "" && this.sendOSC)
277
+ this.sendOSC("/speechflow/dashboard", info.type, info.id, info.kind, info.value);
278
+ });
279
+ }
280
+ }
281
+ /* stop API server service */
282
+ async stop(args) {
283
+ /* shutdown HAPI service */
284
+ if (this.hapi) {
285
+ this.cli.log("info", `HAPI: stopping REST/WebSocket network service: http://${args.a}:${args.p}`);
286
+ await this.hapi.stop({ timeout: 2000 });
287
+ }
288
+ /* clear WebSocket connections */
289
+ if (this.wsPeers.size > 0) {
290
+ this.cli.log("info", "HAPI: closing WebSocket connections");
291
+ const closePromises = [];
292
+ for (const [peer, info] of this.wsPeers.entries()) {
293
+ closePromises.push(new Promise((resolve, reject) => {
294
+ if (info.ws.readyState !== ws_1.default.OPEN)
295
+ resolve();
296
+ else {
297
+ const timeout = setTimeout(() => {
298
+ reject(new Error(`timeout for peer ${peer}`));
299
+ }, 2 * 1000);
300
+ info.ws.once("close", () => {
301
+ clearTimeout(timeout);
302
+ resolve();
303
+ });
304
+ info.ws.close();
305
+ }
306
+ }));
307
+ }
308
+ await Promise.race([
309
+ Promise.all(closePromises),
310
+ new Promise((resolve, reject) => setTimeout(() => reject(new Error("timeout for all peers")), 5 * 1000))
311
+ ]).catch((error) => {
312
+ this.cli.log("warning", `HAPI: WebSockets failed to close: ${util.ensureError(error).message}`);
313
+ });
314
+ this.wsPeers.clear();
315
+ }
316
+ }
317
+ }
318
+ exports.APIServer = APIServer;
319
+ //# sourceMappingURL=speechflow-main-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-main-api.js","sourceRoot":"","sources":["../src/speechflow-main-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import CLIio from "cli-io";
2
+ export interface CLIOptions {
3
+ V: boolean;
4
+ S: boolean;
5
+ v: string;
6
+ a: string;
7
+ p: number;
8
+ C: string;
9
+ d: string;
10
+ o: string;
11
+ e: string;
12
+ f: string;
13
+ c: string;
14
+ _: (string | number)[];
15
+ }
16
+ export declare class CLIContext {
17
+ cli: CLIio | null;
18
+ args: CLIOptions | null;
19
+ config: string | null;
20
+ debug: boolean;
21
+ isInitialized(): this is CLIContext & {
22
+ cli: CLIio;
23
+ args: CLIOptions;
24
+ config: string;
25
+ };
26
+ init(): Promise<void>;
27
+ handleTopLevelError(err: Error): never;
28
+ }