@tx5dr/contracts 1.2.0

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 (180) hide show
  1. package/CLAUDE.md +41 -0
  2. package/dist/index.d.ts +55 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +86 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/schema/__tests__/plugin-runtime-log.schema.test.d.ts +2 -0
  7. package/dist/schema/__tests__/plugin-runtime-log.schema.test.d.ts.map +1 -0
  8. package/dist/schema/__tests__/plugin-runtime-log.schema.test.js +78 -0
  9. package/dist/schema/__tests__/plugin-runtime-log.schema.test.js.map +1 -0
  10. package/dist/schema/ability.d.ts +85 -0
  11. package/dist/schema/ability.d.ts.map +1 -0
  12. package/dist/schema/ability.js +119 -0
  13. package/dist/schema/ability.js.map +1 -0
  14. package/dist/schema/api-response.schema.d.ts +1017 -0
  15. package/dist/schema/api-response.schema.d.ts.map +1 -0
  16. package/dist/schema/api-response.schema.js +137 -0
  17. package/dist/schema/api-response.schema.js.map +1 -0
  18. package/dist/schema/audio-sidecar.schema.d.ts +106 -0
  19. package/dist/schema/audio-sidecar.schema.d.ts.map +1 -0
  20. package/dist/schema/audio-sidecar.schema.js +47 -0
  21. package/dist/schema/audio-sidecar.schema.js.map +1 -0
  22. package/dist/schema/audio.schema.d.ts +227 -0
  23. package/dist/schema/audio.schema.d.ts.map +1 -0
  24. package/dist/schema/audio.schema.js +56 -0
  25. package/dist/schema/audio.schema.js.map +1 -0
  26. package/dist/schema/auth.schema.d.ts +738 -0
  27. package/dist/schema/auth.schema.d.ts.map +1 -0
  28. package/dist/schema/auth.schema.js +161 -0
  29. package/dist/schema/auth.schema.js.map +1 -0
  30. package/dist/schema/cycle.schema.d.ts +33 -0
  31. package/dist/schema/cycle.schema.d.ts.map +1 -0
  32. package/dist/schema/cycle.schema.js +23 -0
  33. package/dist/schema/cycle.schema.js.map +1 -0
  34. package/dist/schema/desktop-https.schema.d.ts +146 -0
  35. package/dist/schema/desktop-https.schema.d.ts.map +1 -0
  36. package/dist/schema/desktop-https.schema.js +31 -0
  37. package/dist/schema/desktop-https.schema.js.map +1 -0
  38. package/dist/schema/ft8.schema.d.ts +1107 -0
  39. package/dist/schema/ft8.schema.d.ts.map +1 -0
  40. package/dist/schema/ft8.schema.js +268 -0
  41. package/dist/schema/ft8.schema.js.map +1 -0
  42. package/dist/schema/hello.schema.d.ts +10 -0
  43. package/dist/schema/hello.schema.d.ts.map +1 -0
  44. package/dist/schema/hello.schema.js +5 -0
  45. package/dist/schema/hello.schema.js.map +1 -0
  46. package/dist/schema/logbook.schema.d.ts +1472 -0
  47. package/dist/schema/logbook.schema.d.ts.map +1 -0
  48. package/dist/schema/logbook.schema.js +256 -0
  49. package/dist/schema/logbook.schema.js.map +1 -0
  50. package/dist/schema/mode.schema.d.ts +130 -0
  51. package/dist/schema/mode.schema.d.ts.map +1 -0
  52. package/dist/schema/mode.schema.js +141 -0
  53. package/dist/schema/mode.schema.js.map +1 -0
  54. package/dist/schema/openwebrx.schema.d.ts +352 -0
  55. package/dist/schema/openwebrx.schema.d.ts.map +1 -0
  56. package/dist/schema/openwebrx.schema.js +139 -0
  57. package/dist/schema/openwebrx.schema.js.map +1 -0
  58. package/dist/schema/operator.schema.d.ts +883 -0
  59. package/dist/schema/operator.schema.d.ts.map +1 -0
  60. package/dist/schema/operator.schema.js +97 -0
  61. package/dist/schema/operator.schema.js.map +1 -0
  62. package/dist/schema/plugin.schema.d.ts +1579 -0
  63. package/dist/schema/plugin.schema.d.ts.map +1 -0
  64. package/dist/schema/plugin.schema.js +336 -0
  65. package/dist/schema/plugin.schema.js.map +1 -0
  66. package/dist/schema/process-monitor.schema.d.ts +282 -0
  67. package/dist/schema/process-monitor.schema.d.ts.map +1 -0
  68. package/dist/schema/process-monitor.schema.js +31 -0
  69. package/dist/schema/process-monitor.schema.js.map +1 -0
  70. package/dist/schema/pskreporter.schema.d.ts +185 -0
  71. package/dist/schema/pskreporter.schema.d.ts.map +1 -0
  72. package/dist/schema/pskreporter.schema.js +80 -0
  73. package/dist/schema/pskreporter.schema.js.map +1 -0
  74. package/dist/schema/qso.schema.d.ts +419 -0
  75. package/dist/schema/qso.schema.d.ts.map +1 -0
  76. package/dist/schema/qso.schema.js +137 -0
  77. package/dist/schema/qso.schema.js.map +1 -0
  78. package/dist/schema/radio-capability.schema.d.ts +625 -0
  79. package/dist/schema/radio-capability.schema.d.ts.map +1 -0
  80. package/dist/schema/radio-capability.schema.js +191 -0
  81. package/dist/schema/radio-capability.schema.js.map +1 -0
  82. package/dist/schema/radio-power-support.d.ts +45 -0
  83. package/dist/schema/radio-power-support.d.ts.map +1 -0
  84. package/dist/schema/radio-power-support.js +64 -0
  85. package/dist/schema/radio-power-support.js.map +1 -0
  86. package/dist/schema/radio-power.schema.d.ts +319 -0
  87. package/dist/schema/radio-power.schema.d.ts.map +1 -0
  88. package/dist/schema/radio-power.schema.js +87 -0
  89. package/dist/schema/radio-power.schema.js.map +1 -0
  90. package/dist/schema/radio-profile.schema.d.ts +2694 -0
  91. package/dist/schema/radio-profile.schema.d.ts.map +1 -0
  92. package/dist/schema/radio-profile.schema.js +71 -0
  93. package/dist/schema/radio-profile.schema.js.map +1 -0
  94. package/dist/schema/radio.schema.d.ts +1438 -0
  95. package/dist/schema/radio.schema.d.ts.map +1 -0
  96. package/dist/schema/radio.schema.js +314 -0
  97. package/dist/schema/radio.schema.js.map +1 -0
  98. package/dist/schema/realtime.schema.d.ts +1299 -0
  99. package/dist/schema/realtime.schema.d.ts.map +1 -0
  100. package/dist/schema/realtime.schema.js +184 -0
  101. package/dist/schema/realtime.schema.js.map +1 -0
  102. package/dist/schema/rigctld.schema.d.ts +151 -0
  103. package/dist/schema/rigctld.schema.d.ts.map +1 -0
  104. package/dist/schema/rigctld.schema.js +42 -0
  105. package/dist/schema/rigctld.schema.js.map +1 -0
  106. package/dist/schema/server-message-keys.d.ts +21 -0
  107. package/dist/schema/server-message-keys.d.ts.map +1 -0
  108. package/dist/schema/server-message-keys.js +22 -0
  109. package/dist/schema/server-message-keys.js.map +1 -0
  110. package/dist/schema/slot-info.schema.d.ts +696 -0
  111. package/dist/schema/slot-info.schema.d.ts.map +1 -0
  112. package/dist/schema/slot-info.schema.js +144 -0
  113. package/dist/schema/slot-info.schema.js.map +1 -0
  114. package/dist/schema/spectrum.schema.d.ts +716 -0
  115. package/dist/schema/spectrum.schema.d.ts.map +1 -0
  116. package/dist/schema/spectrum.schema.js +128 -0
  117. package/dist/schema/spectrum.schema.js.map +1 -0
  118. package/dist/schema/station-info.schema.d.ts +202 -0
  119. package/dist/schema/station-info.schema.d.ts.map +1 -0
  120. package/dist/schema/station-info.schema.js +32 -0
  121. package/dist/schema/station-info.schema.js.map +1 -0
  122. package/dist/schema/system.schema.d.ts +113 -0
  123. package/dist/schema/system.schema.d.ts.map +1 -0
  124. package/dist/schema/system.schema.js +95 -0
  125. package/dist/schema/system.schema.js.map +1 -0
  126. package/dist/schema/transmission.schema.d.ts +413 -0
  127. package/dist/schema/transmission.schema.d.ts.map +1 -0
  128. package/dist/schema/transmission.schema.js +78 -0
  129. package/dist/schema/transmission.schema.js.map +1 -0
  130. package/dist/schema/voice.schema.d.ts +38 -0
  131. package/dist/schema/voice.schema.d.ts.map +1 -0
  132. package/dist/schema/voice.schema.js +24 -0
  133. package/dist/schema/voice.schema.js.map +1 -0
  134. package/dist/schema/websocket.schema.d.ts +16916 -0
  135. package/dist/schema/websocket.schema.d.ts.map +1 -0
  136. package/dist/schema/websocket.schema.js +1050 -0
  137. package/dist/schema/websocket.schema.js.map +1 -0
  138. package/dist/utils/grid.d.ts +13 -0
  139. package/dist/utils/grid.d.ts.map +1 -0
  140. package/dist/utils/grid.js +71 -0
  141. package/dist/utils/grid.js.map +1 -0
  142. package/eslint.config.js +15 -0
  143. package/package.json +28 -0
  144. package/src/index.ts +152 -0
  145. package/src/schema/__tests__/plugin-runtime-log.schema.test.ts +90 -0
  146. package/src/schema/ability.ts +205 -0
  147. package/src/schema/api-response.schema.ts +187 -0
  148. package/src/schema/audio-sidecar.schema.ts +53 -0
  149. package/src/schema/audio.schema.ts +73 -0
  150. package/src/schema/auth.schema.ts +224 -0
  151. package/src/schema/cycle.schema.ts +25 -0
  152. package/src/schema/desktop-https.schema.ts +43 -0
  153. package/src/schema/ft8.schema.ts +362 -0
  154. package/src/schema/hello.schema.ts +7 -0
  155. package/src/schema/logbook.schema.ts +310 -0
  156. package/src/schema/mode.schema.ts +158 -0
  157. package/src/schema/openwebrx.schema.ts +160 -0
  158. package/src/schema/operator.schema.ts +112 -0
  159. package/src/schema/plugin.schema.ts +503 -0
  160. package/src/schema/process-monitor.schema.ts +41 -0
  161. package/src/schema/pskreporter.schema.ts +102 -0
  162. package/src/schema/qso.schema.ts +173 -0
  163. package/src/schema/radio-capability.schema.ts +244 -0
  164. package/src/schema/radio-power-support.ts +107 -0
  165. package/src/schema/radio-power.schema.ts +101 -0
  166. package/src/schema/radio-profile.schema.ts +91 -0
  167. package/src/schema/radio.schema.ts +385 -0
  168. package/src/schema/realtime.schema.ts +262 -0
  169. package/src/schema/rigctld.schema.ts +51 -0
  170. package/src/schema/server-message-keys.ts +26 -0
  171. package/src/schema/slot-info.schema.ts +162 -0
  172. package/src/schema/spectrum.schema.ts +166 -0
  173. package/src/schema/station-info.schema.ts +40 -0
  174. package/src/schema/system.schema.ts +121 -0
  175. package/src/schema/transmission.schema.ts +105 -0
  176. package/src/schema/voice.schema.ts +28 -0
  177. package/src/schema/websocket.schema.ts +1480 -0
  178. package/src/utils/grid.ts +94 -0
  179. package/test/mode-schema.test.ts +48 -0
  180. package/tsconfig.json +9 -0
@@ -0,0 +1,352 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * OpenWebRX SDR Profile 频率覆盖范围(持久化缓存)
4
+ * Profile API 只返回 {id, name},覆盖范围需切换到该 profile 后从 config 获取。
5
+ * 缓存后避免重复探测(每次探测需 11s 冷却以规避 bot 检测)。
6
+ */
7
+ export declare const OpenWebRXProfileCoverageSchema: z.ZodObject<{
8
+ profileId: z.ZodString;
9
+ profileName: z.ZodString;
10
+ centerFreq: z.ZodNumber;
11
+ sampRate: z.ZodNumber;
12
+ lastUpdated: z.ZodNumber;
13
+ }, "strip", z.ZodTypeAny, {
14
+ lastUpdated: number;
15
+ profileId: string;
16
+ profileName: string;
17
+ centerFreq: number;
18
+ sampRate: number;
19
+ }, {
20
+ lastUpdated: number;
21
+ profileId: string;
22
+ profileName: string;
23
+ centerFreq: number;
24
+ sampRate: number;
25
+ }>;
26
+ /**
27
+ * OpenWebRX SDR 站点配置 Schema
28
+ */
29
+ export declare const OpenWebRXStationConfigSchema: z.ZodObject<{
30
+ /** 站点唯一ID */
31
+ id: z.ZodString;
32
+ /** 用户定义的站点名称 */
33
+ name: z.ZodString;
34
+ /** WebSocket URL,如 "ws://host:8073" 或 "wss://..." */
35
+ url: z.ZodString;
36
+ /** 站点描述 */
37
+ description: z.ZodOptional<z.ZodString>;
38
+ /** 已知的 Profile 频率覆盖范围缓存(持久化,重启后无需重新探测) */
39
+ profileCoverages: z.ZodOptional<z.ZodArray<z.ZodObject<{
40
+ profileId: z.ZodString;
41
+ profileName: z.ZodString;
42
+ centerFreq: z.ZodNumber;
43
+ sampRate: z.ZodNumber;
44
+ lastUpdated: z.ZodNumber;
45
+ }, "strip", z.ZodTypeAny, {
46
+ lastUpdated: number;
47
+ profileId: string;
48
+ profileName: string;
49
+ centerFreq: number;
50
+ sampRate: number;
51
+ }, {
52
+ lastUpdated: number;
53
+ profileId: string;
54
+ profileName: string;
55
+ centerFreq: number;
56
+ sampRate: number;
57
+ }>, "many">>;
58
+ }, "strip", z.ZodTypeAny, {
59
+ id: string;
60
+ name: string;
61
+ url: string;
62
+ description?: string | undefined;
63
+ profileCoverages?: {
64
+ lastUpdated: number;
65
+ profileId: string;
66
+ profileName: string;
67
+ centerFreq: number;
68
+ sampRate: number;
69
+ }[] | undefined;
70
+ }, {
71
+ id: string;
72
+ name: string;
73
+ url: string;
74
+ description?: string | undefined;
75
+ profileCoverages?: {
76
+ lastUpdated: number;
77
+ profileId: string;
78
+ profileName: string;
79
+ centerFreq: number;
80
+ sampRate: number;
81
+ }[] | undefined;
82
+ }>;
83
+ /**
84
+ * OpenWebRX SDR Profile 信息(远端服务器返回)
85
+ */
86
+ export declare const OpenWebRXProfileSchema: z.ZodObject<{
87
+ /** Profile ID,格式为 "sdr_id|profile_id" */
88
+ id: z.ZodString;
89
+ /** 显示名称 */
90
+ name: z.ZodString;
91
+ }, "strip", z.ZodTypeAny, {
92
+ id: string;
93
+ name: string;
94
+ }, {
95
+ id: string;
96
+ name: string;
97
+ }>;
98
+ /**
99
+ * OpenWebRX 连接测试结果
100
+ */
101
+ export declare const OpenWebRXTestResultSchema: z.ZodObject<{
102
+ success: z.ZodBoolean;
103
+ /** 服务器版本 */
104
+ serverVersion: z.ZodOptional<z.ZodString>;
105
+ /** 可用的 SDR Profile 列表 */
106
+ profiles: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
+ /** Profile ID,格式为 "sdr_id|profile_id" */
108
+ id: z.ZodString;
109
+ /** 显示名称 */
110
+ name: z.ZodString;
111
+ }, "strip", z.ZodTypeAny, {
112
+ id: string;
113
+ name: string;
114
+ }, {
115
+ id: string;
116
+ name: string;
117
+ }>, "many">>;
118
+ /** 错误信息 */
119
+ error: z.ZodOptional<z.ZodString>;
120
+ }, "strip", z.ZodTypeAny, {
121
+ success: boolean;
122
+ error?: string | undefined;
123
+ profiles?: {
124
+ id: string;
125
+ name: string;
126
+ }[] | undefined;
127
+ serverVersion?: string | undefined;
128
+ }, {
129
+ success: boolean;
130
+ error?: string | undefined;
131
+ profiles?: {
132
+ id: string;
133
+ name: string;
134
+ }[] | undefined;
135
+ serverVersion?: string | undefined;
136
+ }>;
137
+ /**
138
+ * OpenWebRX 试听状态
139
+ */
140
+ export declare const OpenWebRXListenStatusSchema: z.ZodObject<{
141
+ /** 试听会话ID,用于生成 LiveKit preview 房间 */
142
+ previewSessionId: z.ZodOptional<z.ZodString>;
143
+ /** 站点ID */
144
+ stationId: z.ZodString;
145
+ /** 是否已连接 */
146
+ connected: z.ZodBoolean;
147
+ /** 服务器版本 */
148
+ serverVersion: z.ZodOptional<z.ZodString>;
149
+ /** 可用 Profile 列表 */
150
+ profiles: z.ZodArray<z.ZodObject<{
151
+ /** Profile ID,格式为 "sdr_id|profile_id" */
152
+ id: z.ZodString;
153
+ /** 显示名称 */
154
+ name: z.ZodString;
155
+ }, "strip", z.ZodTypeAny, {
156
+ id: string;
157
+ name: string;
158
+ }, {
159
+ id: string;
160
+ name: string;
161
+ }>, "many">;
162
+ /** 当前选中的 Profile ID */
163
+ currentProfileId: z.ZodOptional<z.ZodString>;
164
+ /** 当前中心频率 (Hz) */
165
+ centerFreq: z.ZodOptional<z.ZodNumber>;
166
+ /** 当前采样率 (Hz) */
167
+ sampleRate: z.ZodOptional<z.ZodNumber>;
168
+ /** 当前 tune 频率 (Hz) */
169
+ frequency: z.ZodOptional<z.ZodNumber>;
170
+ /** 当前调制模式 */
171
+ modulation: z.ZodOptional<z.ZodString>;
172
+ /** S-Meter 读数 (dBFS) */
173
+ smeterDb: z.ZodOptional<z.ZodNumber>;
174
+ /** 是否正在试听 */
175
+ isListening: z.ZodBoolean;
176
+ /** 错误信息 */
177
+ error: z.ZodOptional<z.ZodString>;
178
+ }, "strip", z.ZodTypeAny, {
179
+ connected: boolean;
180
+ profiles: {
181
+ id: string;
182
+ name: string;
183
+ }[];
184
+ stationId: string;
185
+ isListening: boolean;
186
+ sampleRate?: number | undefined;
187
+ error?: string | undefined;
188
+ frequency?: number | undefined;
189
+ previewSessionId?: string | undefined;
190
+ centerFreq?: number | undefined;
191
+ serverVersion?: string | undefined;
192
+ currentProfileId?: string | undefined;
193
+ modulation?: string | undefined;
194
+ smeterDb?: number | undefined;
195
+ }, {
196
+ connected: boolean;
197
+ profiles: {
198
+ id: string;
199
+ name: string;
200
+ }[];
201
+ stationId: string;
202
+ isListening: boolean;
203
+ sampleRate?: number | undefined;
204
+ error?: string | undefined;
205
+ frequency?: number | undefined;
206
+ previewSessionId?: string | undefined;
207
+ centerFreq?: number | undefined;
208
+ serverVersion?: string | undefined;
209
+ currentProfileId?: string | undefined;
210
+ modulation?: string | undefined;
211
+ smeterDb?: number | undefined;
212
+ }>;
213
+ /**
214
+ * OpenWebRX 试听启动参数
215
+ */
216
+ export declare const OpenWebRXListenStartSchema: z.ZodObject<{
217
+ /** 站点ID */
218
+ stationId: z.ZodString;
219
+ /** 指定 Profile ID(可选,不指定则使用默认) */
220
+ profileId: z.ZodOptional<z.ZodString>;
221
+ /** 频率 (Hz) */
222
+ frequency: z.ZodOptional<z.ZodNumber>;
223
+ /** 调制模式 */
224
+ modulation: z.ZodOptional<z.ZodString>;
225
+ }, "strip", z.ZodTypeAny, {
226
+ stationId: string;
227
+ frequency?: number | undefined;
228
+ profileId?: string | undefined;
229
+ modulation?: string | undefined;
230
+ }, {
231
+ stationId: string;
232
+ frequency?: number | undefined;
233
+ profileId?: string | undefined;
234
+ modulation?: string | undefined;
235
+ }>;
236
+ /**
237
+ * OpenWebRX 试听调整参数
238
+ */
239
+ export declare const OpenWebRXListenTuneSchema: z.ZodObject<{
240
+ /** 切换到的 Profile ID */
241
+ profileId: z.ZodOptional<z.ZodString>;
242
+ /** 频率 (Hz) */
243
+ frequency: z.ZodOptional<z.ZodNumber>;
244
+ /** 调制模式 */
245
+ modulation: z.ZodOptional<z.ZodString>;
246
+ /** 带通滤波器低端 (Hz) */
247
+ bandpassLow: z.ZodOptional<z.ZodNumber>;
248
+ /** 带通滤波器高端 (Hz) */
249
+ bandpassHigh: z.ZodOptional<z.ZodNumber>;
250
+ }, "strip", z.ZodTypeAny, {
251
+ frequency?: number | undefined;
252
+ profileId?: string | undefined;
253
+ modulation?: string | undefined;
254
+ bandpassLow?: number | undefined;
255
+ bandpassHigh?: number | undefined;
256
+ }, {
257
+ frequency?: number | undefined;
258
+ profileId?: string | undefined;
259
+ modulation?: string | undefined;
260
+ bandpassLow?: number | undefined;
261
+ bandpassHigh?: number | undefined;
262
+ }>;
263
+ /**
264
+ * Server → Client: 请求管理员手动选择 SDR Profile
265
+ * 当引擎自动匹配(缓存 + 名称启发式)全部失败时发出
266
+ */
267
+ export declare const OpenWebRXProfileSelectRequestSchema: z.ZodObject<{
268
+ requestId: z.ZodString;
269
+ targetFrequency: z.ZodNumber;
270
+ profiles: z.ZodArray<z.ZodObject<{
271
+ id: z.ZodString;
272
+ name: z.ZodString;
273
+ }, "strip", z.ZodTypeAny, {
274
+ id: string;
275
+ name: string;
276
+ }, {
277
+ id: string;
278
+ name: string;
279
+ }>, "many">;
280
+ currentProfileId: z.ZodOptional<z.ZodString>;
281
+ }, "strip", z.ZodTypeAny, {
282
+ profiles: {
283
+ id: string;
284
+ name: string;
285
+ }[];
286
+ requestId: string;
287
+ targetFrequency: number;
288
+ currentProfileId?: string | undefined;
289
+ }, {
290
+ profiles: {
291
+ id: string;
292
+ name: string;
293
+ }[];
294
+ requestId: string;
295
+ targetFrequency: number;
296
+ currentProfileId?: string | undefined;
297
+ }>;
298
+ /**
299
+ * Client → Server: 用户选择了 Profile 并请求验证
300
+ */
301
+ export declare const OpenWebRXProfileSelectResponseSchema: z.ZodObject<{
302
+ requestId: z.ZodString;
303
+ profileId: z.ZodString;
304
+ targetFrequency: z.ZodNumber;
305
+ }, "strip", z.ZodTypeAny, {
306
+ profileId: string;
307
+ requestId: string;
308
+ targetFrequency: number;
309
+ }, {
310
+ profileId: string;
311
+ requestId: string;
312
+ targetFrequency: number;
313
+ }>;
314
+ /**
315
+ * Server → Client: Profile 验证结果
316
+ */
317
+ export declare const OpenWebRXProfileVerifyResultSchema: z.ZodObject<{
318
+ requestId: z.ZodString;
319
+ success: z.ZodBoolean;
320
+ profileId: z.ZodString;
321
+ profileName: z.ZodOptional<z.ZodString>;
322
+ centerFreq: z.ZodOptional<z.ZodNumber>;
323
+ sampRate: z.ZodOptional<z.ZodNumber>;
324
+ error: z.ZodOptional<z.ZodString>;
325
+ }, "strip", z.ZodTypeAny, {
326
+ success: boolean;
327
+ profileId: string;
328
+ requestId: string;
329
+ error?: string | undefined;
330
+ profileName?: string | undefined;
331
+ centerFreq?: number | undefined;
332
+ sampRate?: number | undefined;
333
+ }, {
334
+ success: boolean;
335
+ profileId: string;
336
+ requestId: string;
337
+ error?: string | undefined;
338
+ profileName?: string | undefined;
339
+ centerFreq?: number | undefined;
340
+ sampRate?: number | undefined;
341
+ }>;
342
+ export type OpenWebRXStationConfig = z.infer<typeof OpenWebRXStationConfigSchema>;
343
+ export type OpenWebRXProfile = z.infer<typeof OpenWebRXProfileSchema>;
344
+ export type OpenWebRXProfileCoverage = z.infer<typeof OpenWebRXProfileCoverageSchema>;
345
+ export type OpenWebRXTestResult = z.infer<typeof OpenWebRXTestResultSchema>;
346
+ export type OpenWebRXListenStatus = z.infer<typeof OpenWebRXListenStatusSchema>;
347
+ export type OpenWebRXListenStart = z.infer<typeof OpenWebRXListenStartSchema>;
348
+ export type OpenWebRXListenTune = z.infer<typeof OpenWebRXListenTuneSchema>;
349
+ export type OpenWebRXProfileSelectRequest = z.infer<typeof OpenWebRXProfileSelectRequestSchema>;
350
+ export type OpenWebRXProfileSelectResponse = z.infer<typeof OpenWebRXProfileSelectResponseSchema>;
351
+ export type OpenWebRXProfileVerifyResult = z.infer<typeof OpenWebRXProfileVerifyResultSchema>;
352
+ //# sourceMappingURL=openwebrx.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openwebrx.schema.d.ts","sourceRoot":"","sources":["../../src/schema/openwebrx.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;EAMzC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;IACvC,aAAa;;IAEb,gBAAgB;;IAEhB,qDAAqD;;IAErD,WAAW;;IAEX,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE1C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;IACjC,yCAAyC;;IAEzC,WAAW;;;;;;;;EAEX,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;IAEpC,YAAY;;IAEZ,yBAAyB;;QAbzB,yCAAyC;;QAEzC,WAAW;;;;;;;;;IAaX,WAAW;;;;;;;;;;;;;;;;;;EAEX,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;IACtC,qCAAqC;;IAErC,WAAW;;IAEX,YAAY;;IAEZ,YAAY;;IAEZ,oBAAoB;;QA/BpB,yCAAyC;;QAEzC,WAAW;;;;;;;;;IA+BX,uBAAuB;;IAEvB,kBAAkB;;IAElB,iBAAiB;;IAEjB,sBAAsB;;IAEtB,aAAa;;IAEb,wBAAwB;;IAExB,aAAa;;IAEb,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEX,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B;IACrC,WAAW;;IAEX,iCAAiC;;IAEjC,cAAc;;IAEd,WAAW;;;;;;;;;;;;EAEX,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;IACpC,sBAAsB;;IAEtB,cAAc;;IAEd,WAAW;;IAEX,mBAAmB;;IAEnB,mBAAmB;;;;;;;;;;;;;;EAEnB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK9C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;EAI/C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;EAQ7C,CAAC;AAGH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACtF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAChG,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAClG,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
@@ -0,0 +1,139 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * OpenWebRX SDR Profile 频率覆盖范围(持久化缓存)
4
+ * Profile API 只返回 {id, name},覆盖范围需切换到该 profile 后从 config 获取。
5
+ * 缓存后避免重复探测(每次探测需 11s 冷却以规避 bot 检测)。
6
+ */
7
+ export const OpenWebRXProfileCoverageSchema = z.object({
8
+ profileId: z.string(),
9
+ profileName: z.string(),
10
+ centerFreq: z.number(),
11
+ sampRate: z.number(),
12
+ lastUpdated: z.number(),
13
+ });
14
+ /**
15
+ * OpenWebRX SDR 站点配置 Schema
16
+ */
17
+ export const OpenWebRXStationConfigSchema = z.object({
18
+ /** 站点唯一ID */
19
+ id: z.string(),
20
+ /** 用户定义的站点名称 */
21
+ name: z.string().min(1),
22
+ /** WebSocket URL,如 "ws://host:8073" 或 "wss://..." */
23
+ url: z.string().url(),
24
+ /** 站点描述 */
25
+ description: z.string().optional(),
26
+ /** 已知的 Profile 频率覆盖范围缓存(持久化,重启后无需重新探测) */
27
+ profileCoverages: z.array(OpenWebRXProfileCoverageSchema).optional(),
28
+ });
29
+ /**
30
+ * OpenWebRX SDR Profile 信息(远端服务器返回)
31
+ */
32
+ export const OpenWebRXProfileSchema = z.object({
33
+ /** Profile ID,格式为 "sdr_id|profile_id" */
34
+ id: z.string(),
35
+ /** 显示名称 */
36
+ name: z.string(),
37
+ });
38
+ /**
39
+ * OpenWebRX 连接测试结果
40
+ */
41
+ export const OpenWebRXTestResultSchema = z.object({
42
+ success: z.boolean(),
43
+ /** 服务器版本 */
44
+ serverVersion: z.string().optional(),
45
+ /** 可用的 SDR Profile 列表 */
46
+ profiles: z.array(OpenWebRXProfileSchema).optional(),
47
+ /** 错误信息 */
48
+ error: z.string().optional(),
49
+ });
50
+ /**
51
+ * OpenWebRX 试听状态
52
+ */
53
+ export const OpenWebRXListenStatusSchema = z.object({
54
+ /** 试听会话ID,用于生成 LiveKit preview 房间 */
55
+ previewSessionId: z.string().optional(),
56
+ /** 站点ID */
57
+ stationId: z.string(),
58
+ /** 是否已连接 */
59
+ connected: z.boolean(),
60
+ /** 服务器版本 */
61
+ serverVersion: z.string().optional(),
62
+ /** 可用 Profile 列表 */
63
+ profiles: z.array(OpenWebRXProfileSchema),
64
+ /** 当前选中的 Profile ID */
65
+ currentProfileId: z.string().optional(),
66
+ /** 当前中心频率 (Hz) */
67
+ centerFreq: z.number().optional(),
68
+ /** 当前采样率 (Hz) */
69
+ sampleRate: z.number().optional(),
70
+ /** 当前 tune 频率 (Hz) */
71
+ frequency: z.number().optional(),
72
+ /** 当前调制模式 */
73
+ modulation: z.string().optional(),
74
+ /** S-Meter 读数 (dBFS) */
75
+ smeterDb: z.number().optional(),
76
+ /** 是否正在试听 */
77
+ isListening: z.boolean(),
78
+ /** 错误信息 */
79
+ error: z.string().optional(),
80
+ });
81
+ /**
82
+ * OpenWebRX 试听启动参数
83
+ */
84
+ export const OpenWebRXListenStartSchema = z.object({
85
+ /** 站点ID */
86
+ stationId: z.string(),
87
+ /** 指定 Profile ID(可选,不指定则使用默认) */
88
+ profileId: z.string().optional(),
89
+ /** 频率 (Hz) */
90
+ frequency: z.number().optional(),
91
+ /** 调制模式 */
92
+ modulation: z.string().optional(),
93
+ });
94
+ /**
95
+ * OpenWebRX 试听调整参数
96
+ */
97
+ export const OpenWebRXListenTuneSchema = z.object({
98
+ /** 切换到的 Profile ID */
99
+ profileId: z.string().optional(),
100
+ /** 频率 (Hz) */
101
+ frequency: z.number().optional(),
102
+ /** 调制模式 */
103
+ modulation: z.string().optional(),
104
+ /** 带通滤波器低端 (Hz) */
105
+ bandpassLow: z.number().optional(),
106
+ /** 带通滤波器高端 (Hz) */
107
+ bandpassHigh: z.number().optional(),
108
+ });
109
+ /**
110
+ * Server → Client: 请求管理员手动选择 SDR Profile
111
+ * 当引擎自动匹配(缓存 + 名称启发式)全部失败时发出
112
+ */
113
+ export const OpenWebRXProfileSelectRequestSchema = z.object({
114
+ requestId: z.string(),
115
+ targetFrequency: z.number(),
116
+ profiles: z.array(z.object({ id: z.string(), name: z.string() })),
117
+ currentProfileId: z.string().optional(),
118
+ });
119
+ /**
120
+ * Client → Server: 用户选择了 Profile 并请求验证
121
+ */
122
+ export const OpenWebRXProfileSelectResponseSchema = z.object({
123
+ requestId: z.string(),
124
+ profileId: z.string(),
125
+ targetFrequency: z.number(),
126
+ });
127
+ /**
128
+ * Server → Client: Profile 验证结果
129
+ */
130
+ export const OpenWebRXProfileVerifyResultSchema = z.object({
131
+ requestId: z.string(),
132
+ success: z.boolean(),
133
+ profileId: z.string(),
134
+ profileName: z.string().optional(),
135
+ centerFreq: z.number().optional(),
136
+ sampRate: z.number().optional(),
137
+ error: z.string().optional(),
138
+ });
139
+ //# sourceMappingURL=openwebrx.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openwebrx.schema.js","sourceRoot":"","sources":["../../src/schema/openwebrx.schema.ts"],"names":[],"mappings":"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"}