@tx5dr/contracts 1.7.2 → 1.7.4

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 (142) hide show
  1. package/dist/index.d.ts +5 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +7 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/schema/__tests__/ability.test.d.ts +2 -0
  6. package/dist/schema/__tests__/ability.test.d.ts.map +1 -0
  7. package/dist/schema/__tests__/ability.test.js +32 -0
  8. package/dist/schema/__tests__/ability.test.js.map +1 -0
  9. package/dist/schema/__tests__/audio.schema.test.js +4 -0
  10. package/dist/schema/__tests__/audio.schema.test.js.map +1 -1
  11. package/dist/schema/__tests__/cw-decoder.schema.test.d.ts +2 -0
  12. package/dist/schema/__tests__/cw-decoder.schema.test.d.ts.map +1 -0
  13. package/dist/schema/__tests__/cw-decoder.schema.test.js +114 -0
  14. package/dist/schema/__tests__/cw-decoder.schema.test.js.map +1 -0
  15. package/dist/schema/__tests__/device-ui.schema.test.d.ts +2 -0
  16. package/dist/schema/__tests__/device-ui.schema.test.d.ts.map +1 -0
  17. package/dist/schema/__tests__/device-ui.schema.test.js +111 -0
  18. package/dist/schema/__tests__/device-ui.schema.test.js.map +1 -0
  19. package/dist/schema/__tests__/operator.schema.test.d.ts +2 -0
  20. package/dist/schema/__tests__/operator.schema.test.d.ts.map +1 -0
  21. package/dist/schema/__tests__/operator.schema.test.js +23 -0
  22. package/dist/schema/__tests__/operator.schema.test.js.map +1 -0
  23. package/dist/schema/__tests__/process-monitor.schema.test.d.ts +2 -0
  24. package/dist/schema/__tests__/process-monitor.schema.test.d.ts.map +1 -0
  25. package/dist/schema/__tests__/process-monitor.schema.test.js +235 -0
  26. package/dist/schema/__tests__/process-monitor.schema.test.js.map +1 -0
  27. package/dist/schema/__tests__/radio.schema.test.d.ts +2 -0
  28. package/dist/schema/__tests__/radio.schema.test.d.ts.map +1 -0
  29. package/dist/schema/__tests__/radio.schema.test.js +143 -0
  30. package/dist/schema/__tests__/radio.schema.test.js.map +1 -0
  31. package/dist/schema/ability.d.ts +3 -1
  32. package/dist/schema/ability.d.ts.map +1 -1
  33. package/dist/schema/ability.js +11 -0
  34. package/dist/schema/ability.js.map +1 -1
  35. package/dist/schema/api-response.schema.d.ts +170 -3
  36. package/dist/schema/api-response.schema.d.ts.map +1 -1
  37. package/dist/schema/api-response.schema.js +22 -0
  38. package/dist/schema/api-response.schema.js.map +1 -1
  39. package/dist/schema/audio.schema.d.ts +369 -0
  40. package/dist/schema/audio.schema.d.ts.map +1 -1
  41. package/dist/schema/audio.schema.js +3 -0
  42. package/dist/schema/audio.schema.js.map +1 -1
  43. package/dist/schema/cpu-profile.schema.d.ts +6 -6
  44. package/dist/schema/cw-decoder.schema.d.ts +2501 -0
  45. package/dist/schema/cw-decoder.schema.d.ts.map +1 -0
  46. package/dist/schema/cw-decoder.schema.js +196 -0
  47. package/dist/schema/cw-decoder.schema.js.map +1 -0
  48. package/dist/schema/cw-keyer.schema.d.ts +368 -0
  49. package/dist/schema/cw-keyer.schema.d.ts.map +1 -0
  50. package/dist/schema/cw-keyer.schema.js +143 -0
  51. package/dist/schema/cw-keyer.schema.js.map +1 -0
  52. package/dist/schema/desktop-https.schema.js +1 -1
  53. package/dist/schema/desktop-https.schema.js.map +1 -1
  54. package/dist/schema/device-ui.schema.d.ts +1782 -0
  55. package/dist/schema/device-ui.schema.d.ts.map +1 -0
  56. package/dist/schema/device-ui.schema.js +156 -0
  57. package/dist/schema/device-ui.schema.js.map +1 -0
  58. package/dist/schema/logbook.schema.d.ts +2 -2
  59. package/dist/schema/mode.schema.d.ts +1 -0
  60. package/dist/schema/mode.schema.d.ts.map +1 -1
  61. package/dist/schema/mode.schema.js +8 -0
  62. package/dist/schema/mode.schema.js.map +1 -1
  63. package/dist/schema/operator.schema.d.ts +10 -10
  64. package/dist/schema/operator.schema.d.ts.map +1 -1
  65. package/dist/schema/operator.schema.js +6 -1
  66. package/dist/schema/operator.schema.js.map +1 -1
  67. package/dist/schema/plugin.schema.d.ts +653 -70
  68. package/dist/schema/plugin.schema.d.ts.map +1 -1
  69. package/dist/schema/plugin.schema.js +22 -2
  70. package/dist/schema/plugin.schema.js.map +1 -1
  71. package/dist/schema/process-monitor.schema.d.ts +3102 -42
  72. package/dist/schema/process-monitor.schema.d.ts.map +1 -1
  73. package/dist/schema/process-monitor.schema.js +54 -0
  74. package/dist/schema/process-monitor.schema.js.map +1 -1
  75. package/dist/schema/radio-capability.schema.d.ts +7 -7
  76. package/dist/schema/radio-capability.schema.d.ts.map +1 -1
  77. package/dist/schema/radio-capability.schema.js +41 -0
  78. package/dist/schema/radio-capability.schema.js.map +1 -1
  79. package/dist/schema/radio-power.schema.d.ts +6 -0
  80. package/dist/schema/radio-power.schema.d.ts.map +1 -1
  81. package/dist/schema/radio-profile.schema.d.ts +86 -0
  82. package/dist/schema/radio-profile.schema.d.ts.map +1 -1
  83. package/dist/schema/radio.schema.d.ts +166 -9
  84. package/dist/schema/radio.schema.d.ts.map +1 -1
  85. package/dist/schema/radio.schema.js +82 -0
  86. package/dist/schema/radio.schema.js.map +1 -1
  87. package/dist/schema/realtime.schema.d.ts +6 -6
  88. package/dist/schema/slot-info.schema.d.ts +136 -0
  89. package/dist/schema/slot-info.schema.d.ts.map +1 -1
  90. package/dist/schema/slot-info.schema.js +27 -2
  91. package/dist/schema/slot-info.schema.js.map +1 -1
  92. package/dist/schema/spectrum.schema.d.ts +24 -24
  93. package/dist/schema/voice-keyer.schema.d.ts +2 -2
  94. package/dist/schema/voice.schema.d.ts +1 -1
  95. package/dist/schema/voice.schema.d.ts.map +1 -1
  96. package/dist/schema/voice.schema.js +1 -1
  97. package/dist/schema/voice.schema.js.map +1 -1
  98. package/dist/schema/websocket.schema.d.ts +6066 -639
  99. package/dist/schema/websocket.schema.d.ts.map +1 -1
  100. package/dist/schema/websocket.schema.js +106 -4
  101. package/dist/schema/websocket.schema.js.map +1 -1
  102. package/dist/utils/__tests__/cwTiming.test.d.ts +2 -0
  103. package/dist/utils/__tests__/cwTiming.test.d.ts.map +1 -0
  104. package/dist/utils/__tests__/cwTiming.test.js +74 -0
  105. package/dist/utils/__tests__/cwTiming.test.js.map +1 -0
  106. package/dist/utils/callsign.d.ts +2 -0
  107. package/dist/utils/callsign.d.ts.map +1 -0
  108. package/dist/utils/callsign.js +8 -0
  109. package/dist/utils/callsign.js.map +1 -0
  110. package/dist/utils/cwTiming.d.ts +36 -0
  111. package/dist/utils/cwTiming.d.ts.map +1 -0
  112. package/dist/utils/cwTiming.js +155 -0
  113. package/dist/utils/cwTiming.js.map +1 -0
  114. package/package.json +1 -1
  115. package/src/index.ts +9 -0
  116. package/src/schema/__tests__/ability.test.ts +40 -0
  117. package/src/schema/__tests__/audio.schema.test.ts +4 -0
  118. package/src/schema/__tests__/cw-decoder.schema.test.ts +127 -0
  119. package/src/schema/__tests__/device-ui.schema.test.ts +122 -0
  120. package/src/schema/__tests__/operator.schema.test.ts +29 -0
  121. package/src/schema/__tests__/process-monitor.schema.test.ts +245 -0
  122. package/src/schema/__tests__/radio.schema.test.ts +160 -0
  123. package/src/schema/ability.ts +13 -0
  124. package/src/schema/api-response.schema.ts +22 -0
  125. package/src/schema/audio.schema.ts +3 -0
  126. package/src/schema/cw-decoder.schema.ts +234 -0
  127. package/src/schema/cw-keyer.schema.ts +177 -0
  128. package/src/schema/desktop-https.schema.ts +1 -1
  129. package/src/schema/device-ui.schema.ts +182 -0
  130. package/src/schema/mode.schema.ts +8 -0
  131. package/src/schema/operator.schema.ts +7 -1
  132. package/src/schema/plugin.schema.ts +28 -2
  133. package/src/schema/process-monitor.schema.ts +69 -0
  134. package/src/schema/radio-capability.schema.ts +41 -0
  135. package/src/schema/radio.schema.ts +97 -0
  136. package/src/schema/slot-info.schema.ts +33 -2
  137. package/src/schema/voice.schema.ts +1 -1
  138. package/src/schema/websocket.schema.ts +147 -4
  139. package/src/utils/__tests__/cwTiming.test.ts +91 -0
  140. package/src/utils/callsign.ts +9 -0
  141. package/src/utils/cwTiming.ts +203 -0
  142. package/test/decode-request-schema.test.ts +48 -0
@@ -1,4 +1,28 @@
1
1
  import { z } from 'zod';
2
+ /**
3
+ * Frequency context captured when a slot pack is created.
4
+ * Fields are optional so older persisted slot packs remain valid.
5
+ */
6
+ export declare const SlotPackFrequencyContextSchema: z.ZodObject<{
7
+ frequency: z.ZodOptional<z.ZodNumber>;
8
+ mode: z.ZodOptional<z.ZodString>;
9
+ band: z.ZodOptional<z.ZodString>;
10
+ radioMode: z.ZodOptional<z.ZodString>;
11
+ description: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ mode?: string | undefined;
14
+ frequency?: number | undefined;
15
+ band?: string | undefined;
16
+ radioMode?: string | undefined;
17
+ description?: string | undefined;
18
+ }, {
19
+ mode?: string | undefined;
20
+ frequency?: number | undefined;
21
+ band?: string | undefined;
22
+ radioMode?: string | undefined;
23
+ description?: string | undefined;
24
+ }>;
25
+ export type SlotPackFrequencyContext = z.infer<typeof SlotPackFrequencyContextSchema>;
2
26
  /**
3
27
  * 时隙周期(偶数奇数)
4
28
  */
@@ -217,6 +241,35 @@ export declare const FrameMessageSchema: z.ZodObject<{
217
241
  } | undefined;
218
242
  }>;
219
243
  export type FrameMessage = z.infer<typeof FrameMessageSchema>;
244
+ export declare const DecodeApContextSchema: z.ZodObject<{
245
+ operatorId: z.ZodString;
246
+ myCall: z.ZodString;
247
+ myGrid: z.ZodOptional<z.ZodString>;
248
+ dxCall: z.ZodString;
249
+ dxGrid: z.ZodOptional<z.ZodString>;
250
+ frequencyHz: z.ZodNumber;
251
+ qsoProgress: z.ZodNumber;
252
+ currentSlot: z.ZodString;
253
+ }, "strip", z.ZodTypeAny, {
254
+ operatorId: string;
255
+ myCall: string;
256
+ dxCall: string;
257
+ frequencyHz: number;
258
+ qsoProgress: number;
259
+ currentSlot: string;
260
+ myGrid?: string | undefined;
261
+ dxGrid?: string | undefined;
262
+ }, {
263
+ operatorId: string;
264
+ myCall: string;
265
+ dxCall: string;
266
+ frequencyHz: number;
267
+ qsoProgress: number;
268
+ currentSlot: string;
269
+ myGrid?: string | undefined;
270
+ dxGrid?: string | undefined;
271
+ }>;
272
+ export type DecodeApContext = z.infer<typeof DecodeApContextSchema>;
220
273
  /**
221
274
  * 解码请求,用于SlotScheduler内部
222
275
  */
@@ -235,6 +288,35 @@ export declare const DecodeRequestSchema: z.ZodObject<{
235
288
  timestamp: z.ZodDefault<z.ZodNumber>;
236
289
  /** 窗口时间偏移(毫秒) */
237
290
  windowOffsetMs: z.ZodDefault<z.ZodNumber>;
291
+ /** 可选的单操作员 AP decode 上下文 */
292
+ apContext: z.ZodOptional<z.ZodObject<{
293
+ operatorId: z.ZodString;
294
+ myCall: z.ZodString;
295
+ myGrid: z.ZodOptional<z.ZodString>;
296
+ dxCall: z.ZodString;
297
+ dxGrid: z.ZodOptional<z.ZodString>;
298
+ frequencyHz: z.ZodNumber;
299
+ qsoProgress: z.ZodNumber;
300
+ currentSlot: z.ZodString;
301
+ }, "strip", z.ZodTypeAny, {
302
+ operatorId: string;
303
+ myCall: string;
304
+ dxCall: string;
305
+ frequencyHz: number;
306
+ qsoProgress: number;
307
+ currentSlot: string;
308
+ myGrid?: string | undefined;
309
+ dxGrid?: string | undefined;
310
+ }, {
311
+ operatorId: string;
312
+ myCall: string;
313
+ dxCall: string;
314
+ frequencyHz: number;
315
+ qsoProgress: number;
316
+ currentSlot: string;
317
+ myGrid?: string | undefined;
318
+ dxGrid?: string | undefined;
319
+ }>>;
238
320
  }, "strip", z.ZodTypeAny, {
239
321
  sampleRate: number;
240
322
  mode: "FT8" | "FT4";
@@ -243,6 +325,16 @@ export declare const DecodeRequestSchema: z.ZodObject<{
243
325
  pcm: ArrayBuffer;
244
326
  timestamp: number;
245
327
  windowOffsetMs: number;
328
+ apContext?: {
329
+ operatorId: string;
330
+ myCall: string;
331
+ dxCall: string;
332
+ frequencyHz: number;
333
+ qsoProgress: number;
334
+ currentSlot: string;
335
+ myGrid?: string | undefined;
336
+ dxGrid?: string | undefined;
337
+ } | undefined;
246
338
  }, {
247
339
  slotId: string;
248
340
  windowIdx: number;
@@ -251,6 +343,16 @@ export declare const DecodeRequestSchema: z.ZodObject<{
251
343
  mode?: "FT8" | "FT4" | undefined;
252
344
  timestamp?: number | undefined;
253
345
  windowOffsetMs?: number | undefined;
346
+ apContext?: {
347
+ operatorId: string;
348
+ myCall: string;
349
+ dxCall: string;
350
+ frequencyHz: number;
351
+ qsoProgress: number;
352
+ currentSlot: string;
353
+ myGrid?: string | undefined;
354
+ dxGrid?: string | undefined;
355
+ } | undefined;
254
356
  }>;
255
357
  export type DecodeRequest = z.infer<typeof DecodeRequestSchema>;
256
358
  /**
@@ -619,6 +721,26 @@ export declare const SlotPackSchema: z.ZodObject<{
619
721
  processingTimeMs: number;
620
722
  frameCount: number;
621
723
  }>, "many">>;
724
+ /** Dial/band context active when this slot was created. */
725
+ frequencyContext: z.ZodOptional<z.ZodObject<{
726
+ frequency: z.ZodOptional<z.ZodNumber>;
727
+ mode: z.ZodOptional<z.ZodString>;
728
+ band: z.ZodOptional<z.ZodString>;
729
+ radioMode: z.ZodOptional<z.ZodString>;
730
+ description: z.ZodOptional<z.ZodString>;
731
+ }, "strip", z.ZodTypeAny, {
732
+ mode?: string | undefined;
733
+ frequency?: number | undefined;
734
+ band?: string | undefined;
735
+ radioMode?: string | undefined;
736
+ description?: string | undefined;
737
+ }, {
738
+ mode?: string | undefined;
739
+ frequency?: number | undefined;
740
+ band?: string | undefined;
741
+ radioMode?: string | undefined;
742
+ description?: string | undefined;
743
+ }>>;
622
744
  }, "strip", z.ZodTypeAny, {
623
745
  startMs: number;
624
746
  slotId: string;
@@ -660,6 +782,13 @@ export declare const SlotPackSchema: z.ZodObject<{
660
782
  processingTimeMs: number;
661
783
  frameCount: number;
662
784
  }[];
785
+ frequencyContext?: {
786
+ mode?: string | undefined;
787
+ frequency?: number | undefined;
788
+ band?: string | undefined;
789
+ radioMode?: string | undefined;
790
+ description?: string | undefined;
791
+ } | undefined;
663
792
  }, {
664
793
  startMs: number;
665
794
  slotId: string;
@@ -701,6 +830,13 @@ export declare const SlotPackSchema: z.ZodObject<{
701
830
  processingTimeMs: number;
702
831
  frameCount: number;
703
832
  }[] | undefined;
833
+ frequencyContext?: {
834
+ mode?: string | undefined;
835
+ frequency?: number | undefined;
836
+ band?: string | undefined;
837
+ radioMode?: string | undefined;
838
+ description?: string | undefined;
839
+ } | undefined;
704
840
  }>;
705
841
  export type SlotPack = z.infer<typeof SlotPackSchema>;
706
842
  //# sourceMappingURL=slot-info.schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot-info.schema.d.ts","sourceRoot":"","sources":["../../src/schema/slot-info.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,cAAc;;IAEd,kBAAkB;;IAElB,eAAe;;IAEf,eAAe;;IAEf,YAAY;;IAEZ,kBAAkB;;IAElB,oBAAoB;;;;;;;;;;;;;;;;;;EAEpB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC,sBAAsB;;IAEtB,+BAA+B;;IAE/B,uBAAuB;;IAEvB,kBAAkB;;IAElB,yBAAyB;;IAEzB,kBAAkB;;IAElB,kBAAkB;;IAElB,kBAAkB;;IAElB,yCAAyC;;IAEzC,sBAAsB;;IAEtB,gBAAgB;;IAEhB,eAAe;;IAEf,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEX,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,gBAAgB;;IAEhB,gBAAgB;;IAEhB,eAAe;;IAEf,WAAW;;IAEX,cAAc;;IAEd,mCAAmC;;QA5CnC,sBAAsB;;QAEtB,+BAA+B;;QAE/B,uBAAuB;;QAEvB,kBAAkB;;QAElB,yBAAyB;;QAEzB,kBAAkB;;QAElB,kBAAkB;;QAElB,kBAAkB;;QAElB,yCAAyC;;QAEzC,sBAAsB;;QAEtB,gBAAgB;;QAEhB,eAAe;;QAEf,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBX,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,cAAc;;IAEd,WAAW;;IAEX,YAAY;;IAEZ,eAAe;;IAEf,UAAU;;IAEV,YAAY;;IAEZ,iBAAiB;;;;;;;;;;;;;;;;;;EAEjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,cAAc;;IAEd,YAAY;;IAEZ,cAAc;;QAhDd,gBAAgB;;QAEhB,gBAAgB;;QAEhB,eAAe;;QAEf,WAAW;;QAEX,cAAc;;QAEd,mCAAmC;;YA5CnC,sBAAsB;;YAEtB,+BAA+B;;YAE/B,uBAAuB;;YAEvB,kBAAkB;;YAElB,yBAAyB;;YAEzB,kBAAkB;;YAElB,kBAAkB;;YAElB,kBAAkB;;YAElB,yCAAyC;;YAEzC,sBAAsB;;YAEtB,gBAAgB;;YAEhB,eAAe;;YAEf,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsBX,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsCpC,YAAY;;IAEZ,eAAe;;IAEf,gBAAgB;;IAEhB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEjB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,WAAW;;IAEX,kBAAkB;;IAElB,kBAAkB;;IAElB,iBAAiB;;QAxEjB,gBAAgB;;QAEhB,gBAAgB;;QAEhB,eAAe;;QAEf,WAAW;;QAEX,cAAc;;QAEd,mCAAmC;;YA5CnC,sBAAsB;;YAEtB,+BAA+B;;YAE/B,uBAAuB;;YAEvB,kBAAkB;;YAElB,yBAAyB;;YAEzB,kBAAkB;;YAElB,kBAAkB;;YAElB,kBAAkB;;YAElB,yCAAyC;;YAEzC,sBAAsB;;YAEtB,gBAAgB;;YAEhB,eAAe;;YAEf,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsBX,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8DpC,aAAa;;QAEX,YAAY;;QAEZ,aAAa;;QAEb,cAAc;;QAEd,aAAa;;QAEb,cAAc;;QAEd,kCAAkC;;;;;;;;;;;;;;;;;IAGpC,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"slot-info.schema.d.ts","sourceRoot":"","sources":["../../src/schema/slot-info.schema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  import { DxccStatusSchema, SubdivisionConfidenceSchema } from './qso.schema.js';
3
+ /**
4
+ * Frequency context captured when a slot pack is created.
5
+ * Fields are optional so older persisted slot packs remain valid.
6
+ */
7
+ export const SlotPackFrequencyContextSchema = z.object({
8
+ frequency: z.number().optional(),
9
+ mode: z.string().optional(),
10
+ band: z.string().optional(),
11
+ radioMode: z.string().optional(),
12
+ description: z.string().optional(),
13
+ });
3
14
  /**
4
15
  * 时隙周期(偶数奇数)
5
16
  */
@@ -72,6 +83,16 @@ export const FrameMessageSchema = z.object({
72
83
  /** 操作员ID(可选,仅 TX 帧使用,用于多操作员覆盖识别) */
73
84
  operatorId: z.string().optional()
74
85
  });
86
+ export const DecodeApContextSchema = z.object({
87
+ operatorId: z.string(),
88
+ myCall: z.string(),
89
+ myGrid: z.string().optional(),
90
+ dxCall: z.string(),
91
+ dxGrid: z.string().optional(),
92
+ frequencyHz: z.number(),
93
+ qsoProgress: z.number(),
94
+ currentSlot: z.string(),
95
+ });
75
96
  /**
76
97
  * 解码请求,用于SlotScheduler内部
77
98
  */
@@ -89,7 +110,9 @@ export const DecodeRequestSchema = z.object({
89
110
  /** 请求时间戳 */
90
111
  timestamp: z.number().default(() => Date.now()),
91
112
  /** 窗口时间偏移(毫秒) */
92
- windowOffsetMs: z.number().default(0)
113
+ windowOffsetMs: z.number().default(0),
114
+ /** 可选的单操作员 AP decode 上下文 */
115
+ apContext: DecodeApContextSchema.optional()
93
116
  });
94
117
  /**
95
118
  * 解码结果,用于SlotScheduler内部
@@ -143,6 +166,8 @@ export const SlotPackSchema = z.object({
143
166
  timestamp: z.number(),
144
167
  frameCount: z.number(),
145
168
  processingTimeMs: z.number()
146
- })).default([])
169
+ })).default([]),
170
+ /** Dial/band context active when this slot was created. */
171
+ frequencyContext: SlotPackFrequencyContextSchema.optional()
147
172
  });
148
173
  //# sourceMappingURL=slot-info.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot-info.schema.js","sourceRoot":"","sources":["../../src/schema/slot-info.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slot-info.schema.js","sourceRoot":"","sources":["../../src/schema/slot-info.schema.ts"],"names":[],"mappings":"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"}
@@ -220,20 +220,20 @@ export declare const SpectrumSourceAvailabilitySchema: z.ZodObject<{
220
220
  supportsWaterfall: z.ZodBoolean;
221
221
  frequencyRangeMode: z.ZodEnum<["absolute", "baseband"]>;
222
222
  }, "strip", z.ZodTypeAny, {
223
+ available: boolean;
223
224
  displayBinCount: number;
224
225
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
225
226
  supported: boolean;
226
- available: boolean;
227
227
  defaultSelected: boolean;
228
228
  supportsWaterfall: boolean;
229
229
  frequencyRangeMode: "baseband" | "absolute";
230
230
  reason?: string | undefined;
231
231
  sourceBinCount?: number | null | undefined;
232
232
  }, {
233
+ available: boolean;
233
234
  displayBinCount: number;
234
235
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
235
236
  supported: boolean;
236
- available: boolean;
237
237
  defaultSelected: boolean;
238
238
  supportsWaterfall: boolean;
239
239
  frequencyRangeMode: "baseband" | "absolute";
@@ -254,20 +254,20 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
254
254
  supportsWaterfall: z.ZodBoolean;
255
255
  frequencyRangeMode: z.ZodEnum<["absolute", "baseband"]>;
256
256
  }, "strip", z.ZodTypeAny, {
257
+ available: boolean;
257
258
  displayBinCount: number;
258
259
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
259
260
  supported: boolean;
260
- available: boolean;
261
261
  defaultSelected: boolean;
262
262
  supportsWaterfall: boolean;
263
263
  frequencyRangeMode: "baseband" | "absolute";
264
264
  reason?: string | undefined;
265
265
  sourceBinCount?: number | null | undefined;
266
266
  }, {
267
+ available: boolean;
267
268
  displayBinCount: number;
268
269
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
269
270
  supported: boolean;
270
- available: boolean;
271
271
  defaultSelected: boolean;
272
272
  supportsWaterfall: boolean;
273
273
  frequencyRangeMode: "baseband" | "absolute";
@@ -278,10 +278,10 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
278
278
  profileId: string | null;
279
279
  defaultKind: "audio" | "radio-sdr" | "openwebrx-sdr";
280
280
  sources: {
281
+ available: boolean;
281
282
  displayBinCount: number;
282
283
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
283
284
  supported: boolean;
284
- available: boolean;
285
285
  defaultSelected: boolean;
286
286
  supportsWaterfall: boolean;
287
287
  frequencyRangeMode: "baseband" | "absolute";
@@ -292,10 +292,10 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
292
292
  profileId: string | null;
293
293
  defaultKind: "audio" | "radio-sdr" | "openwebrx-sdr";
294
294
  sources: {
295
+ available: boolean;
295
296
  displayBinCount: number;
296
297
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
297
298
  supported: boolean;
298
- available: boolean;
299
299
  defaultSelected: boolean;
300
300
  supportsWaterfall: boolean;
301
301
  frequencyRangeMode: "baseband" | "absolute";
@@ -319,19 +319,19 @@ export declare const SpectrumSessionControlSchema: z.ZodObject<{
319
319
  pending: z.ZodBoolean;
320
320
  }, "strip", z.ZodTypeAny, {
321
321
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
322
+ active: boolean;
322
323
  kind: "server" | "local";
323
324
  action: "in" | "out" | "toggle";
324
325
  visible: boolean;
325
326
  enabled: boolean;
326
- active: boolean;
327
327
  pending: boolean;
328
328
  }, {
329
329
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
330
+ active: boolean;
330
331
  kind: "server" | "local";
331
332
  action: "in" | "out" | "toggle";
332
333
  visible: boolean;
333
334
  enabled: boolean;
334
- active: boolean;
335
335
  pending: boolean;
336
336
  }>;
337
337
  export type SpectrumSessionControl = z.infer<typeof SpectrumSessionControlSchema>;
@@ -361,14 +361,14 @@ export declare const SpectrumSessionPresetMarkerSchema: z.ZodObject<{
361
361
  }, "strip", z.ZodTypeAny, {
362
362
  id: string;
363
363
  frequency: number;
364
- label: string;
365
364
  description: string | null;
365
+ label: string;
366
366
  clickable: boolean;
367
367
  }, {
368
368
  id: string;
369
369
  frequency: number;
370
- label: string;
371
370
  description: string | null;
371
+ label: string;
372
372
  clickable: boolean;
373
373
  }>;
374
374
  export type SpectrumSessionPresetMarker = z.infer<typeof SpectrumSessionPresetMarkerSchema>;
@@ -390,14 +390,14 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
390
390
  }, "strip", z.ZodTypeAny, {
391
391
  id: string;
392
392
  frequency: number;
393
- label: string;
394
393
  description: string | null;
394
+ label: string;
395
395
  clickable: boolean;
396
396
  }, {
397
397
  id: string;
398
398
  frequency: number;
399
- label: string;
400
399
  description: string | null;
400
+ label: string;
401
401
  clickable: boolean;
402
402
  }>, "many">;
403
403
  canDragVoiceOverlay: z.ZodBoolean;
@@ -419,8 +419,8 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
419
419
  presetMarkers: {
420
420
  id: string;
421
421
  frequency: number;
422
- label: string;
423
422
  description: string | null;
423
+ label: string;
424
424
  clickable: boolean;
425
425
  }[];
426
426
  canDragVoiceOverlay: boolean;
@@ -442,8 +442,8 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
442
442
  presetMarkers: {
443
443
  id: string;
444
444
  frequency: number;
445
- label: string;
446
445
  description: string | null;
446
+ label: string;
447
447
  clickable: boolean;
448
448
  }[];
449
449
  canDragVoiceOverlay: boolean;
@@ -509,14 +509,14 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
509
509
  }, "strip", z.ZodTypeAny, {
510
510
  id: string;
511
511
  frequency: number;
512
- label: string;
513
512
  description: string | null;
513
+ label: string;
514
514
  clickable: boolean;
515
515
  }, {
516
516
  id: string;
517
517
  frequency: number;
518
- label: string;
519
518
  description: string | null;
519
+ label: string;
520
520
  clickable: boolean;
521
521
  }>, "many">;
522
522
  canDragVoiceOverlay: z.ZodBoolean;
@@ -538,8 +538,8 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
538
538
  presetMarkers: {
539
539
  id: string;
540
540
  frequency: number;
541
- label: string;
542
541
  description: string | null;
542
+ label: string;
543
543
  clickable: boolean;
544
544
  }[];
545
545
  canDragVoiceOverlay: boolean;
@@ -561,8 +561,8 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
561
561
  presetMarkers: {
562
562
  id: string;
563
563
  frequency: number;
564
- label: string;
565
564
  description: string | null;
565
+ label: string;
566
566
  clickable: boolean;
567
567
  }[];
568
568
  canDragVoiceOverlay: boolean;
@@ -583,19 +583,19 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
583
583
  pending: z.ZodBoolean;
584
584
  }, "strip", z.ZodTypeAny, {
585
585
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
586
+ active: boolean;
586
587
  kind: "server" | "local";
587
588
  action: "in" | "out" | "toggle";
588
589
  visible: boolean;
589
590
  enabled: boolean;
590
- active: boolean;
591
591
  pending: boolean;
592
592
  }, {
593
593
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
594
+ active: boolean;
594
595
  kind: "server" | "local";
595
596
  action: "in" | "out" | "toggle";
596
597
  visible: boolean;
597
598
  enabled: boolean;
598
- active: boolean;
599
599
  pending: boolean;
600
600
  }>, "many">;
601
601
  }, "strip", z.ZodTypeAny, {
@@ -630,8 +630,8 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
630
630
  presetMarkers: {
631
631
  id: string;
632
632
  frequency: number;
633
- label: string;
634
633
  description: string | null;
634
+ label: string;
635
635
  clickable: boolean;
636
636
  }[];
637
637
  canDragVoiceOverlay: boolean;
@@ -644,11 +644,11 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
644
644
  };
645
645
  controls: {
646
646
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
647
+ active: boolean;
647
648
  kind: "server" | "local";
648
649
  action: "in" | "out" | "toggle";
649
650
  visible: boolean;
650
651
  enabled: boolean;
651
- active: boolean;
652
652
  pending: boolean;
653
653
  }[];
654
654
  }, {
@@ -683,8 +683,8 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
683
683
  presetMarkers: {
684
684
  id: string;
685
685
  frequency: number;
686
- label: string;
687
686
  description: string | null;
687
+ label: string;
688
688
  clickable: boolean;
689
689
  }[];
690
690
  canDragVoiceOverlay: boolean;
@@ -697,11 +697,11 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
697
697
  };
698
698
  controls: {
699
699
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
700
+ active: boolean;
700
701
  kind: "server" | "local";
701
702
  action: "in" | "out" | "toggle";
702
703
  visible: boolean;
703
704
  enabled: boolean;
704
- active: boolean;
705
705
  pending: boolean;
706
706
  }[];
707
707
  }>;
@@ -99,21 +99,21 @@ export declare const VoiceKeyerStatusSchema: z.ZodObject<{
99
99
  nextRunAt: z.ZodNullable<z.ZodNumber>;
100
100
  error: z.ZodNullable<z.ZodString>;
101
101
  }, "strip", z.ZodTypeAny, {
102
+ active: boolean;
102
103
  error: string | null;
103
104
  mode: "error" | "idle" | "playing" | "repeat-waiting" | "stopping";
104
105
  callsign: string | null;
105
106
  slotId: string | null;
106
- active: boolean;
107
107
  repeating: boolean;
108
108
  startedBy: string | null;
109
109
  startedByLabel: string | null;
110
110
  nextRunAt: number | null;
111
111
  }, {
112
+ active: boolean;
112
113
  error: string | null;
113
114
  mode: "error" | "idle" | "playing" | "repeat-waiting" | "stopping";
114
115
  callsign: string | null;
115
116
  slotId: string | null;
116
- active: boolean;
117
117
  repeating: boolean;
118
118
  startedBy: string | null;
119
119
  startedByLabel: string | null;
@@ -33,6 +33,6 @@ export type VoicePTTLock = z.infer<typeof VoicePTTLockSchema>;
33
33
  * digital: FT8/FT4 等数字模式
34
34
  * voice: 语音通联模式(SSB/FM/AM)
35
35
  */
36
- export declare const EngineModeSchema: z.ZodEnum<["digital", "voice"]>;
36
+ export declare const EngineModeSchema: z.ZodEnum<["digital", "voice", "cw"]>;
37
37
  export type EngineMode = z.infer<typeof EngineModeSchema>;
38
38
  //# sourceMappingURL=voice.schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"voice.schema.d.ts","sourceRoot":"","sources":["../../src/schema/voice.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;IAC7B,mBAAmB;;IAEnB,iBAAiB;;IAEjB,uCAAuC;;IAEvC,YAAY;;IAEZ,uBAAuB;;;;;;;;;;;;;;EAEvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,iCAA+B,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"voice.schema.d.ts","sourceRoot":"","sources":["../../src/schema/voice.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;IAC7B,mBAAmB;;IAEnB,iBAAiB;;IAEjB,uCAAuC;;IAEvC,YAAY;;IAEZ,uBAAuB;;;;;;;;;;;;;;EAEvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,uCAAqC,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -20,5 +20,5 @@ export const VoicePTTLockSchema = z.object({
20
20
  * digital: FT8/FT4 等数字模式
21
21
  * voice: 语音通联模式(SSB/FM/AM)
22
22
  */
23
- export const EngineModeSchema = z.enum(['digital', 'voice']);
23
+ export const EngineModeSchema = z.enum(['digital', 'voice', 'cw']);
24
24
  //# sourceMappingURL=voice.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voice.schema.js","sourceRoot":"","sources":["../../src/schema/voice.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,mBAAmB;IACnB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,iBAAiB;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,uCAAuC;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY;IACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,uBAAuB;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACtC,CAAC,CAAC;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"voice.schema.js","sourceRoot":"","sources":["../../src/schema/voice.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,mBAAmB;IACnB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,iBAAiB;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,uCAAuC;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY;IACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,uBAAuB;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACtC,CAAC,CAAC;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC"}