@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 @@
1
+ {"version":3,"file":"spectrum.schema.d.ts","sourceRoot":"","sources":["../../src/schema/spectrum.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ export const SpectrumKindSchema = z.enum(['audio', 'radio-sdr', 'openwebrx-sdr']);
3
+ export const SpectrumDisplayModeSchema = z.enum(['center', 'fixed', 'scroll-center', 'scroll-fixed', 'unknown']);
4
+ export const SpectrumSessionSourceModeSchema = z.enum([
5
+ 'baseband',
6
+ 'center',
7
+ 'fixed',
8
+ 'scroll-center',
9
+ 'scroll-fixed',
10
+ 'full',
11
+ 'detail',
12
+ 'unknown',
13
+ ]);
14
+ export const SpectrumSessionFrequencyRangeModeSchema = z.enum([
15
+ 'baseband',
16
+ 'absolute-center',
17
+ 'absolute-fixed',
18
+ 'absolute-windowed',
19
+ ]);
20
+ export const SpectrumFrequencyRangeSchema = z.object({
21
+ min: z.number(),
22
+ max: z.number(),
23
+ });
24
+ export const SpectrumBinaryFormatSchema = z.object({
25
+ type: z.literal('int16'),
26
+ length: z.number().int().positive(),
27
+ scale: z.number().optional(),
28
+ offset: z.number().optional(),
29
+ });
30
+ export const SpectrumBinaryDataSchema = z.object({
31
+ data: z.string(),
32
+ format: SpectrumBinaryFormatSchema,
33
+ });
34
+ export const SpectrumFrameMetaSchema = z.object({
35
+ sourceBinCount: z.number().int().positive(),
36
+ displayBinCount: z.number().int().positive(),
37
+ centerFrequency: z.number().optional(),
38
+ spanHz: z.number().optional(),
39
+ profileId: z.string().nullable().optional(),
40
+ radioModel: z.string().optional(),
41
+ });
42
+ export const SpectrumFrameSchema = z.object({
43
+ timestamp: z.number(),
44
+ kind: SpectrumKindSchema,
45
+ frequencyRange: SpectrumFrequencyRangeSchema,
46
+ binaryData: SpectrumBinaryDataSchema,
47
+ meta: SpectrumFrameMetaSchema,
48
+ });
49
+ export const SpectrumSourceAvailabilitySchema = z.object({
50
+ kind: SpectrumKindSchema,
51
+ supported: z.boolean(),
52
+ available: z.boolean(),
53
+ defaultSelected: z.boolean(),
54
+ reason: z.string().optional(),
55
+ sourceBinCount: z.number().int().positive().nullable().optional(),
56
+ displayBinCount: z.number().int().positive(),
57
+ supportsWaterfall: z.boolean(),
58
+ frequencyRangeMode: z.enum(['absolute', 'baseband']),
59
+ });
60
+ export const SpectrumCapabilitiesSchema = z.object({
61
+ profileId: z.string().nullable(),
62
+ defaultKind: SpectrumKindSchema,
63
+ sources: z.array(SpectrumSourceAvailabilitySchema),
64
+ });
65
+ export const SpectrumSessionControlIdSchema = z.enum([
66
+ 'zoom-step',
67
+ 'digital-window-toggle',
68
+ 'openwebrx-detail-toggle',
69
+ 'viewport-zoom',
70
+ ]);
71
+ export const SpectrumSessionControlActionSchema = z.enum(['in', 'out', 'toggle']);
72
+ export const SpectrumSessionControlKindSchema = z.enum(['server', 'local']);
73
+ export const SpectrumSessionControlSchema = z.object({
74
+ id: SpectrumSessionControlIdSchema,
75
+ action: SpectrumSessionControlActionSchema,
76
+ kind: SpectrumSessionControlKindSchema,
77
+ visible: z.boolean(),
78
+ enabled: z.boolean(),
79
+ active: z.boolean(),
80
+ pending: z.boolean(),
81
+ });
82
+ export const SpectrumSessionVoiceStateSchema = z.object({
83
+ radioMode: z.string().nullable(),
84
+ bandwidthLabel: z.string().nullable(),
85
+ occupiedBandwidthHz: z.number().nullable(),
86
+ offsetModel: z.enum(['upper', 'lower', 'symmetric']).nullable(),
87
+ });
88
+ export const SpectrumSessionPresetMarkerSchema = z.object({
89
+ id: z.string(),
90
+ frequency: z.number(),
91
+ label: z.string(),
92
+ description: z.string().nullable(),
93
+ clickable: z.boolean(),
94
+ });
95
+ export const SpectrumSessionInteractionStateSchema = z.object({
96
+ showTxMarkers: z.boolean(),
97
+ showRxMarkers: z.boolean(),
98
+ canDragTx: z.boolean(),
99
+ canRightClickSetFrequency: z.boolean(),
100
+ canDoubleClickSetFrequency: z.boolean(),
101
+ canDragFrequency: z.boolean(),
102
+ frequencyGestureTarget: z.enum(['operator-tx', 'radio-frequency']).nullable(),
103
+ frequencyStepHz: z.number().int().positive().nullable(),
104
+ presetMarkers: z.array(SpectrumSessionPresetMarkerSchema),
105
+ canDragVoiceOverlay: z.boolean(),
106
+ showVoiceOverlay: z.boolean(),
107
+ canLocalViewportZoom: z.boolean(),
108
+ canLocalViewportPan: z.boolean(),
109
+ supportsManualRange: z.boolean(),
110
+ supportsAutoRange: z.boolean(),
111
+ defaultRangeMode: z.enum(['auto', 'manual']).nullable(),
112
+ });
113
+ export const SpectrumSessionStateSchema = z.object({
114
+ kind: SpectrumKindSchema.nullable(),
115
+ sourceMode: SpectrumSessionSourceModeSchema,
116
+ frequencyRangeMode: SpectrumSessionFrequencyRangeModeSchema,
117
+ displayRange: SpectrumFrequencyRangeSchema.nullable(),
118
+ centerFrequency: z.number().nullable(),
119
+ currentRadioFrequency: z.number().nullable(),
120
+ standardFrequencyHz: z.number().nullable(),
121
+ edgeLowHz: z.number().nullable(),
122
+ edgeHighHz: z.number().nullable(),
123
+ spanHz: z.number().nullable(),
124
+ voice: SpectrumSessionVoiceStateSchema,
125
+ interaction: SpectrumSessionInteractionStateSchema,
126
+ controls: z.array(SpectrumSessionControlSchema),
127
+ });
128
+ //# sourceMappingURL=spectrum.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spectrum.schema.js","sourceRoot":"","sources":["../../src/schema/spectrum.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import { z } from 'zod';
2
+ export declare const StationQthSchema: z.ZodObject<{
3
+ /** Maidenhead grid locator, e.g. "PM01" or "PM01RP" */
4
+ grid: z.ZodUnion<[z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>, z.ZodLiteral<"">]>;
5
+ /** Human-readable location name, e.g. "Haidian, Beijing" */
6
+ location: z.ZodOptional<z.ZodString>;
7
+ /** Precise latitude entered by the user (overrides grid-derived center) */
8
+ latitude: z.ZodOptional<z.ZodNumber>;
9
+ /** Precise longitude entered by the user (overrides grid-derived center) */
10
+ longitude: z.ZodOptional<z.ZodNumber>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ grid?: string | undefined;
13
+ latitude?: number | undefined;
14
+ longitude?: number | undefined;
15
+ location?: string | undefined;
16
+ }, {
17
+ grid?: string | undefined;
18
+ latitude?: number | undefined;
19
+ longitude?: number | undefined;
20
+ location?: string | undefined;
21
+ }>;
22
+ export declare const StationInfoSchema: z.ZodObject<{
23
+ /** Station display name, e.g. "BG7XXX Remote Station" */
24
+ name: z.ZodOptional<z.ZodString>;
25
+ /** Owner callsign, e.g. "BG7XXX" */
26
+ callsign: z.ZodOptional<z.ZodString>;
27
+ /** Markdown-formatted description (antenna, power, radio model, etc.) */
28
+ description: z.ZodOptional<z.ZodString>;
29
+ /** Station QTH location */
30
+ qth: z.ZodOptional<z.ZodObject<{
31
+ /** Maidenhead grid locator, e.g. "PM01" or "PM01RP" */
32
+ grid: z.ZodUnion<[z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>, z.ZodLiteral<"">]>;
33
+ /** Human-readable location name, e.g. "Haidian, Beijing" */
34
+ location: z.ZodOptional<z.ZodString>;
35
+ /** Precise latitude entered by the user (overrides grid-derived center) */
36
+ latitude: z.ZodOptional<z.ZodNumber>;
37
+ /** Precise longitude entered by the user (overrides grid-derived center) */
38
+ longitude: z.ZodOptional<z.ZodNumber>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ grid?: string | undefined;
41
+ latitude?: number | undefined;
42
+ longitude?: number | undefined;
43
+ location?: string | undefined;
44
+ }, {
45
+ grid?: string | undefined;
46
+ latitude?: number | undefined;
47
+ longitude?: number | undefined;
48
+ location?: string | undefined;
49
+ }>>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ name?: string | undefined;
52
+ callsign?: string | undefined;
53
+ qth?: {
54
+ grid?: string | undefined;
55
+ latitude?: number | undefined;
56
+ longitude?: number | undefined;
57
+ location?: string | undefined;
58
+ } | undefined;
59
+ description?: string | undefined;
60
+ }, {
61
+ name?: string | undefined;
62
+ callsign?: string | undefined;
63
+ qth?: {
64
+ grid?: string | undefined;
65
+ latitude?: number | undefined;
66
+ longitude?: number | undefined;
67
+ location?: string | undefined;
68
+ } | undefined;
69
+ description?: string | undefined;
70
+ }>;
71
+ export type StationQth = z.infer<typeof StationQthSchema>;
72
+ export type StationInfo = z.infer<typeof StationInfoSchema>;
73
+ export declare const UpdateStationInfoRequestSchema: z.ZodObject<{
74
+ /** Station display name, e.g. "BG7XXX Remote Station" */
75
+ name: z.ZodOptional<z.ZodString>;
76
+ /** Owner callsign, e.g. "BG7XXX" */
77
+ callsign: z.ZodOptional<z.ZodString>;
78
+ /** Markdown-formatted description (antenna, power, radio model, etc.) */
79
+ description: z.ZodOptional<z.ZodString>;
80
+ /** Station QTH location */
81
+ qth: z.ZodOptional<z.ZodObject<{
82
+ /** Maidenhead grid locator, e.g. "PM01" or "PM01RP" */
83
+ grid: z.ZodUnion<[z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>, z.ZodLiteral<"">]>;
84
+ /** Human-readable location name, e.g. "Haidian, Beijing" */
85
+ location: z.ZodOptional<z.ZodString>;
86
+ /** Precise latitude entered by the user (overrides grid-derived center) */
87
+ latitude: z.ZodOptional<z.ZodNumber>;
88
+ /** Precise longitude entered by the user (overrides grid-derived center) */
89
+ longitude: z.ZodOptional<z.ZodNumber>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ grid?: string | undefined;
92
+ latitude?: number | undefined;
93
+ longitude?: number | undefined;
94
+ location?: string | undefined;
95
+ }, {
96
+ grid?: string | undefined;
97
+ latitude?: number | undefined;
98
+ longitude?: number | undefined;
99
+ location?: string | undefined;
100
+ }>>;
101
+ }, "strip", z.ZodTypeAny, {
102
+ name?: string | undefined;
103
+ callsign?: string | undefined;
104
+ qth?: {
105
+ grid?: string | undefined;
106
+ latitude?: number | undefined;
107
+ longitude?: number | undefined;
108
+ location?: string | undefined;
109
+ } | undefined;
110
+ description?: string | undefined;
111
+ }, {
112
+ name?: string | undefined;
113
+ callsign?: string | undefined;
114
+ qth?: {
115
+ grid?: string | undefined;
116
+ latitude?: number | undefined;
117
+ longitude?: number | undefined;
118
+ location?: string | undefined;
119
+ } | undefined;
120
+ description?: string | undefined;
121
+ }>;
122
+ export type UpdateStationInfoRequest = StationInfo;
123
+ export declare const StationInfoResponseSchema: z.ZodObject<{
124
+ success: z.ZodBoolean;
125
+ data: z.ZodObject<{
126
+ /** Station display name, e.g. "BG7XXX Remote Station" */
127
+ name: z.ZodOptional<z.ZodString>;
128
+ /** Owner callsign, e.g. "BG7XXX" */
129
+ callsign: z.ZodOptional<z.ZodString>;
130
+ /** Markdown-formatted description (antenna, power, radio model, etc.) */
131
+ description: z.ZodOptional<z.ZodString>;
132
+ /** Station QTH location */
133
+ qth: z.ZodOptional<z.ZodObject<{
134
+ /** Maidenhead grid locator, e.g. "PM01" or "PM01RP" */
135
+ grid: z.ZodUnion<[z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>, z.ZodLiteral<"">]>;
136
+ /** Human-readable location name, e.g. "Haidian, Beijing" */
137
+ location: z.ZodOptional<z.ZodString>;
138
+ /** Precise latitude entered by the user (overrides grid-derived center) */
139
+ latitude: z.ZodOptional<z.ZodNumber>;
140
+ /** Precise longitude entered by the user (overrides grid-derived center) */
141
+ longitude: z.ZodOptional<z.ZodNumber>;
142
+ }, "strip", z.ZodTypeAny, {
143
+ grid?: string | undefined;
144
+ latitude?: number | undefined;
145
+ longitude?: number | undefined;
146
+ location?: string | undefined;
147
+ }, {
148
+ grid?: string | undefined;
149
+ latitude?: number | undefined;
150
+ longitude?: number | undefined;
151
+ location?: string | undefined;
152
+ }>>;
153
+ }, "strip", z.ZodTypeAny, {
154
+ name?: string | undefined;
155
+ callsign?: string | undefined;
156
+ qth?: {
157
+ grid?: string | undefined;
158
+ latitude?: number | undefined;
159
+ longitude?: number | undefined;
160
+ location?: string | undefined;
161
+ } | undefined;
162
+ description?: string | undefined;
163
+ }, {
164
+ name?: string | undefined;
165
+ callsign?: string | undefined;
166
+ qth?: {
167
+ grid?: string | undefined;
168
+ latitude?: number | undefined;
169
+ longitude?: number | undefined;
170
+ location?: string | undefined;
171
+ } | undefined;
172
+ description?: string | undefined;
173
+ }>;
174
+ }, "strip", z.ZodTypeAny, {
175
+ success: boolean;
176
+ data: {
177
+ name?: string | undefined;
178
+ callsign?: string | undefined;
179
+ qth?: {
180
+ grid?: string | undefined;
181
+ latitude?: number | undefined;
182
+ longitude?: number | undefined;
183
+ location?: string | undefined;
184
+ } | undefined;
185
+ description?: string | undefined;
186
+ };
187
+ }, {
188
+ success: boolean;
189
+ data: {
190
+ name?: string | undefined;
191
+ callsign?: string | undefined;
192
+ qth?: {
193
+ grid?: string | undefined;
194
+ latitude?: number | undefined;
195
+ longitude?: number | undefined;
196
+ location?: string | undefined;
197
+ } | undefined;
198
+ description?: string | undefined;
199
+ };
200
+ }>;
201
+ export type StationInfoResponse = z.infer<typeof StationInfoResponseSchema>;
202
+ //# sourceMappingURL=station-info.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"station-info.schema.d.ts","sourceRoot":"","sources":["../../src/schema/station-info.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB;IAC3B,uDAAuD;;IAOvD,4DAA4D;;IAE5D,2EAA2E;;IAE3E,4EAA4E;;;;;;;;;;;;EAE5E,CAAC;AAEH,eAAO,MAAM,iBAAiB;IAC5B,yDAAyD;;IAEzD,oCAAoC;;IAEpC,yEAAyE;;IAEzE,2BAA2B;;QAtB3B,uDAAuD;;QAOvD,4DAA4D;;QAE5D,2EAA2E;;QAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa5E,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,8BAA8B;IAbzC,yDAAyD;;IAEzD,oCAAoC;;IAEpC,yEAAyE;;IAEzE,2BAA2B;;QAtB3B,uDAAuD;;QAOvD,4DAA4D;;QAE5D,2EAA2E;;QAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBf,CAAC;AAChE,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAEnD,eAAO,MAAM,yBAAyB;;;QAhBpC,yDAAyD;;QAEzD,oCAAoC;;QAEpC,yEAAyE;;QAEzE,2BAA2B;;YAtB3B,uDAAuD;;YAOvD,4DAA4D;;YAE5D,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwB5E,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod';
2
+ export const StationQthSchema = z.object({
3
+ /** Maidenhead grid locator, e.g. "PM01" or "PM01RP" */
4
+ grid: z
5
+ .string()
6
+ .regex(/^[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}([0-9]{2})?)?$/, 'Invalid Maidenhead grid locator')
7
+ .transform((s) => s.toUpperCase())
8
+ .optional()
9
+ .or(z.literal('')),
10
+ /** Human-readable location name, e.g. "Haidian, Beijing" */
11
+ location: z.string().max(100).optional(),
12
+ /** Precise latitude entered by the user (overrides grid-derived center) */
13
+ latitude: z.number().min(-90).max(90).optional(),
14
+ /** Precise longitude entered by the user (overrides grid-derived center) */
15
+ longitude: z.number().min(-180).max(180).optional(),
16
+ });
17
+ export const StationInfoSchema = z.object({
18
+ /** Station display name, e.g. "BG7XXX Remote Station" */
19
+ name: z.string().max(100).optional(),
20
+ /** Owner callsign, e.g. "BG7XXX" */
21
+ callsign: z.string().max(20).optional(),
22
+ /** Markdown-formatted description (antenna, power, radio model, etc.) */
23
+ description: z.string().max(2000).optional(),
24
+ /** Station QTH location */
25
+ qth: StationQthSchema.optional(),
26
+ });
27
+ export const UpdateStationInfoRequestSchema = StationInfoSchema;
28
+ export const StationInfoResponseSchema = z.object({
29
+ success: z.boolean(),
30
+ data: StationInfoSchema,
31
+ });
32
+ //# sourceMappingURL=station-info.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"station-info.schema.js","sourceRoot":"","sources":["../../src/schema/station-info.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,uDAAuD;IACvD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,gDAAgD,EAAE,iCAAiC,CAAC;SAC1F,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACjC,QAAQ,EAAE;SACV,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxC,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,4EAA4E;IAC5E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,yDAAyD;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACpC,oCAAoC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,yEAAyE;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAC5C,2BAA2B;IAC3B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;AAGhE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { z } from 'zod';
2
+ export declare const NetworkAddressSchema: z.ZodObject<{
3
+ ip: z.ZodString;
4
+ url: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ url: string;
7
+ ip: string;
8
+ }, {
9
+ url: string;
10
+ ip: string;
11
+ }>;
12
+ export type NetworkAddress = z.infer<typeof NetworkAddressSchema>;
13
+ export declare const NetworkInfoSchema: z.ZodObject<{
14
+ addresses: z.ZodArray<z.ZodObject<{
15
+ ip: z.ZodString;
16
+ url: z.ZodString;
17
+ }, "strip", z.ZodTypeAny, {
18
+ url: string;
19
+ ip: string;
20
+ }, {
21
+ url: string;
22
+ ip: string;
23
+ }>, "many">;
24
+ hostname: z.ZodString;
25
+ webPort: z.ZodNumber;
26
+ }, "strip", z.ZodTypeAny, {
27
+ addresses: {
28
+ url: string;
29
+ ip: string;
30
+ }[];
31
+ hostname: string;
32
+ webPort: number;
33
+ }, {
34
+ addresses: {
35
+ url: string;
36
+ ip: string;
37
+ }[];
38
+ hostname: string;
39
+ webPort: number;
40
+ }>;
41
+ export type NetworkInfo = z.infer<typeof NetworkInfoSchema>;
42
+ export declare const ClockSyncStateSchema: z.ZodEnum<["synced", "stale", "never", "failed"]>;
43
+ export type ClockSyncState = z.infer<typeof ClockSyncStateSchema>;
44
+ export declare const ClockIndicatorStateSchema: z.ZodEnum<["ok", "warn", "alert", "stale", "failed", "never"]>;
45
+ export type ClockIndicatorState = z.infer<typeof ClockIndicatorStateSchema>;
46
+ export declare const ClockStatusSummarySchema: z.ZodObject<{
47
+ appliedOffsetMs: z.ZodNumber;
48
+ indicatorState: z.ZodEnum<["ok", "warn", "alert", "stale", "failed", "never"]>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ appliedOffsetMs: number;
51
+ indicatorState: "never" | "warn" | "failed" | "stale" | "ok" | "alert";
52
+ }, {
53
+ appliedOffsetMs: number;
54
+ indicatorState: "never" | "warn" | "failed" | "stale" | "ok" | "alert";
55
+ }>;
56
+ export type ClockStatusSummary = z.infer<typeof ClockStatusSummarySchema>;
57
+ export declare const ClockStatusDetailSchema: z.ZodObject<{
58
+ appliedOffsetMs: z.ZodNumber;
59
+ indicatorState: z.ZodEnum<["ok", "warn", "alert", "stale", "failed", "never"]>;
60
+ } & {
61
+ measuredOffsetMs: z.ZodNumber;
62
+ lastSyncTime: z.ZodNullable<z.ZodNumber>;
63
+ syncState: z.ZodEnum<["synced", "stale", "never", "failed"]>;
64
+ serverUsed: z.ZodNullable<z.ZodString>;
65
+ errorMessage: z.ZodNullable<z.ZodString>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ appliedOffsetMs: number;
68
+ indicatorState: "never" | "warn" | "failed" | "stale" | "ok" | "alert";
69
+ measuredOffsetMs: number;
70
+ lastSyncTime: number | null;
71
+ syncState: "never" | "failed" | "synced" | "stale";
72
+ serverUsed: string | null;
73
+ errorMessage: string | null;
74
+ }, {
75
+ appliedOffsetMs: number;
76
+ indicatorState: "never" | "warn" | "failed" | "stale" | "ok" | "alert";
77
+ measuredOffsetMs: number;
78
+ lastSyncTime: number | null;
79
+ syncState: "never" | "failed" | "synced" | "stale";
80
+ serverUsed: string | null;
81
+ errorMessage: string | null;
82
+ }>;
83
+ export type ClockStatusDetail = z.infer<typeof ClockStatusDetailSchema>;
84
+ export declare const SetClockOffsetRequestSchema: z.ZodObject<{
85
+ offsetMs: z.ZodNumber;
86
+ }, "strip", z.ZodTypeAny, {
87
+ offsetMs: number;
88
+ }, {
89
+ offsetMs: number;
90
+ }>;
91
+ export type SetClockOffsetRequest = z.infer<typeof SetClockOffsetRequestSchema>;
92
+ export declare function isValidNtpServerHost(value: string): boolean;
93
+ export declare const NtpServerHostSchema: z.ZodEffects<z.ZodString, string, string>;
94
+ export declare const NtpServerListSettingsSchema: z.ZodObject<{
95
+ servers: z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, string[], string[]>;
96
+ defaultServers: z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, string[], string[]>;
97
+ }, "strip", z.ZodTypeAny, {
98
+ servers: string[];
99
+ defaultServers: string[];
100
+ }, {
101
+ servers: string[];
102
+ defaultServers: string[];
103
+ }>;
104
+ export type NtpServerListSettings = z.infer<typeof NtpServerListSettingsSchema>;
105
+ export declare const UpdateNtpServerListRequestSchema: z.ZodObject<{
106
+ servers: z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, string[], string[]>;
107
+ }, "strip", z.ZodTypeAny, {
108
+ servers: string[];
109
+ }, {
110
+ servers: string[];
111
+ }>;
112
+ export type UpdateNtpServerListRequest = z.infer<typeof UpdateNtpServerListRequestSchema>;
113
+ //# sourceMappingURL=system.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.schema.d.ts","sourceRoot":"","sources":["../../src/schema/system.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAI5D,eAAO,MAAM,oBAAoB,mDAAiD,CAAC;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB,gEAA8D,CAAC;AACrG,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;EAMlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,2BAA2B;;;;;;EAEtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AA8BhF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAgB3D;AAED,eAAO,MAAM,mBAAmB,2CAE9B,CAAC;AAgBH,eAAO,MAAM,2BAA2B;;;;;;;;;EAGtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,gCAAgC;;;;;;EAE3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { z } from 'zod';
2
+ // ===== 网络信息 =====
3
+ export const NetworkAddressSchema = z.object({
4
+ ip: z.string(),
5
+ url: z.string(),
6
+ });
7
+ export const NetworkInfoSchema = z.object({
8
+ addresses: z.array(NetworkAddressSchema),
9
+ hostname: z.string(),
10
+ webPort: z.number(),
11
+ });
12
+ // ===== 时钟状态 =====
13
+ export const ClockSyncStateSchema = z.enum(['synced', 'stale', 'never', 'failed']);
14
+ export const ClockIndicatorStateSchema = z.enum(['ok', 'warn', 'alert', 'stale', 'failed', 'never']);
15
+ export const ClockStatusSummarySchema = z.object({
16
+ appliedOffsetMs: z.number(),
17
+ indicatorState: ClockIndicatorStateSchema,
18
+ });
19
+ export const ClockStatusDetailSchema = ClockStatusSummarySchema.extend({
20
+ measuredOffsetMs: z.number(),
21
+ lastSyncTime: z.number().nullable(),
22
+ syncState: ClockSyncStateSchema,
23
+ serverUsed: z.string().nullable(),
24
+ errorMessage: z.string().nullable(),
25
+ });
26
+ export const SetClockOffsetRequestSchema = z.object({
27
+ offsetMs: z.number().finite(),
28
+ });
29
+ // ===== NTP server list settings =====
30
+ function isValidIPv4Address(value) {
31
+ const parts = value.split('.');
32
+ if (parts.length !== 4)
33
+ return false;
34
+ return parts.every((part) => {
35
+ if (!/^\d{1,3}$/.test(part))
36
+ return false;
37
+ const num = Number(part);
38
+ return Number.isInteger(num) && num >= 0 && num <= 255;
39
+ });
40
+ }
41
+ function isValidHostname(value) {
42
+ if (value === 'localhost')
43
+ return true;
44
+ if (value.length > 253)
45
+ return false;
46
+ if (value.startsWith('.') || value.endsWith('.') || value.includes('..'))
47
+ return false;
48
+ if (!/^[A-Za-z0-9.-]+$/.test(value))
49
+ return false;
50
+ const labels = value.split('.');
51
+ return labels.every((label) => (label.length > 0
52
+ && label.length <= 63
53
+ && !label.startsWith('-')
54
+ && !label.endsWith('-')
55
+ && /^[A-Za-z0-9-]+$/.test(label)));
56
+ }
57
+ export function isValidNtpServerHost(value) {
58
+ const trimmed = value.trim();
59
+ if (!trimmed)
60
+ return false;
61
+ if (trimmed.includes('://')
62
+ || trimmed.includes('/')
63
+ || trimmed.includes('?')
64
+ || trimmed.includes('#')
65
+ || trimmed.includes(':')
66
+ || trimmed.includes('[')
67
+ || trimmed.includes(']')) {
68
+ return false;
69
+ }
70
+ return isValidIPv4Address(trimmed) || isValidHostname(trimmed);
71
+ }
72
+ export const NtpServerHostSchema = z.string().trim().min(1).refine(isValidNtpServerHost, {
73
+ message: 'Invalid NTP server host',
74
+ });
75
+ const NtpServerArraySchema = z.array(NtpServerHostSchema).min(1).superRefine((servers, ctx) => {
76
+ const seen = new Set();
77
+ for (const server of servers) {
78
+ if (seen.has(server)) {
79
+ ctx.addIssue({
80
+ code: z.ZodIssueCode.custom,
81
+ message: `Duplicate NTP server: ${server}`,
82
+ });
83
+ return;
84
+ }
85
+ seen.add(server);
86
+ }
87
+ });
88
+ export const NtpServerListSettingsSchema = z.object({
89
+ servers: NtpServerArraySchema,
90
+ defaultServers: NtpServerArraySchema,
91
+ });
92
+ export const UpdateNtpServerListRequestSchema = z.object({
93
+ servers: NtpServerArraySchema,
94
+ });
95
+ //# sourceMappingURL=system.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.schema.js","sourceRoot":"","sources":["../../src/schema/system.schema.ts"],"names":[],"mappings":"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"}