@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.
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/schema/__tests__/ability.test.d.ts +2 -0
- package/dist/schema/__tests__/ability.test.d.ts.map +1 -0
- package/dist/schema/__tests__/ability.test.js +32 -0
- package/dist/schema/__tests__/ability.test.js.map +1 -0
- package/dist/schema/__tests__/audio.schema.test.js +4 -0
- package/dist/schema/__tests__/audio.schema.test.js.map +1 -1
- package/dist/schema/__tests__/cw-decoder.schema.test.d.ts +2 -0
- package/dist/schema/__tests__/cw-decoder.schema.test.d.ts.map +1 -0
- package/dist/schema/__tests__/cw-decoder.schema.test.js +114 -0
- package/dist/schema/__tests__/cw-decoder.schema.test.js.map +1 -0
- package/dist/schema/__tests__/device-ui.schema.test.d.ts +2 -0
- package/dist/schema/__tests__/device-ui.schema.test.d.ts.map +1 -0
- package/dist/schema/__tests__/device-ui.schema.test.js +111 -0
- package/dist/schema/__tests__/device-ui.schema.test.js.map +1 -0
- package/dist/schema/__tests__/operator.schema.test.d.ts +2 -0
- package/dist/schema/__tests__/operator.schema.test.d.ts.map +1 -0
- package/dist/schema/__tests__/operator.schema.test.js +23 -0
- package/dist/schema/__tests__/operator.schema.test.js.map +1 -0
- package/dist/schema/__tests__/process-monitor.schema.test.d.ts +2 -0
- package/dist/schema/__tests__/process-monitor.schema.test.d.ts.map +1 -0
- package/dist/schema/__tests__/process-monitor.schema.test.js +235 -0
- package/dist/schema/__tests__/process-monitor.schema.test.js.map +1 -0
- package/dist/schema/__tests__/radio.schema.test.d.ts +2 -0
- package/dist/schema/__tests__/radio.schema.test.d.ts.map +1 -0
- package/dist/schema/__tests__/radio.schema.test.js +143 -0
- package/dist/schema/__tests__/radio.schema.test.js.map +1 -0
- package/dist/schema/ability.d.ts +3 -1
- package/dist/schema/ability.d.ts.map +1 -1
- package/dist/schema/ability.js +11 -0
- package/dist/schema/ability.js.map +1 -1
- package/dist/schema/api-response.schema.d.ts +170 -3
- package/dist/schema/api-response.schema.d.ts.map +1 -1
- package/dist/schema/api-response.schema.js +22 -0
- package/dist/schema/api-response.schema.js.map +1 -1
- package/dist/schema/audio.schema.d.ts +369 -0
- package/dist/schema/audio.schema.d.ts.map +1 -1
- package/dist/schema/audio.schema.js +3 -0
- package/dist/schema/audio.schema.js.map +1 -1
- package/dist/schema/cpu-profile.schema.d.ts +6 -6
- package/dist/schema/cw-decoder.schema.d.ts +2501 -0
- package/dist/schema/cw-decoder.schema.d.ts.map +1 -0
- package/dist/schema/cw-decoder.schema.js +196 -0
- package/dist/schema/cw-decoder.schema.js.map +1 -0
- package/dist/schema/cw-keyer.schema.d.ts +368 -0
- package/dist/schema/cw-keyer.schema.d.ts.map +1 -0
- package/dist/schema/cw-keyer.schema.js +143 -0
- package/dist/schema/cw-keyer.schema.js.map +1 -0
- package/dist/schema/desktop-https.schema.js +1 -1
- package/dist/schema/desktop-https.schema.js.map +1 -1
- package/dist/schema/device-ui.schema.d.ts +1782 -0
- package/dist/schema/device-ui.schema.d.ts.map +1 -0
- package/dist/schema/device-ui.schema.js +156 -0
- package/dist/schema/device-ui.schema.js.map +1 -0
- package/dist/schema/logbook.schema.d.ts +2 -2
- package/dist/schema/mode.schema.d.ts +1 -0
- package/dist/schema/mode.schema.d.ts.map +1 -1
- package/dist/schema/mode.schema.js +8 -0
- package/dist/schema/mode.schema.js.map +1 -1
- package/dist/schema/operator.schema.d.ts +10 -10
- package/dist/schema/operator.schema.d.ts.map +1 -1
- package/dist/schema/operator.schema.js +6 -1
- package/dist/schema/operator.schema.js.map +1 -1
- package/dist/schema/plugin.schema.d.ts +653 -70
- package/dist/schema/plugin.schema.d.ts.map +1 -1
- package/dist/schema/plugin.schema.js +22 -2
- package/dist/schema/plugin.schema.js.map +1 -1
- package/dist/schema/process-monitor.schema.d.ts +3102 -42
- package/dist/schema/process-monitor.schema.d.ts.map +1 -1
- package/dist/schema/process-monitor.schema.js +54 -0
- package/dist/schema/process-monitor.schema.js.map +1 -1
- package/dist/schema/radio-capability.schema.d.ts +7 -7
- package/dist/schema/radio-capability.schema.d.ts.map +1 -1
- package/dist/schema/radio-capability.schema.js +41 -0
- package/dist/schema/radio-capability.schema.js.map +1 -1
- package/dist/schema/radio-power.schema.d.ts +6 -0
- package/dist/schema/radio-power.schema.d.ts.map +1 -1
- package/dist/schema/radio-profile.schema.d.ts +86 -0
- package/dist/schema/radio-profile.schema.d.ts.map +1 -1
- package/dist/schema/radio.schema.d.ts +166 -9
- package/dist/schema/radio.schema.d.ts.map +1 -1
- package/dist/schema/radio.schema.js +82 -0
- package/dist/schema/radio.schema.js.map +1 -1
- package/dist/schema/realtime.schema.d.ts +6 -6
- package/dist/schema/slot-info.schema.d.ts +136 -0
- package/dist/schema/slot-info.schema.d.ts.map +1 -1
- package/dist/schema/slot-info.schema.js +27 -2
- package/dist/schema/slot-info.schema.js.map +1 -1
- package/dist/schema/spectrum.schema.d.ts +24 -24
- package/dist/schema/voice-keyer.schema.d.ts +2 -2
- package/dist/schema/voice.schema.d.ts +1 -1
- package/dist/schema/voice.schema.d.ts.map +1 -1
- package/dist/schema/voice.schema.js +1 -1
- package/dist/schema/voice.schema.js.map +1 -1
- package/dist/schema/websocket.schema.d.ts +6066 -639
- package/dist/schema/websocket.schema.d.ts.map +1 -1
- package/dist/schema/websocket.schema.js +106 -4
- package/dist/schema/websocket.schema.js.map +1 -1
- package/dist/utils/__tests__/cwTiming.test.d.ts +2 -0
- package/dist/utils/__tests__/cwTiming.test.d.ts.map +1 -0
- package/dist/utils/__tests__/cwTiming.test.js +74 -0
- package/dist/utils/__tests__/cwTiming.test.js.map +1 -0
- package/dist/utils/callsign.d.ts +2 -0
- package/dist/utils/callsign.d.ts.map +1 -0
- package/dist/utils/callsign.js +8 -0
- package/dist/utils/callsign.js.map +1 -0
- package/dist/utils/cwTiming.d.ts +36 -0
- package/dist/utils/cwTiming.d.ts.map +1 -0
- package/dist/utils/cwTiming.js +155 -0
- package/dist/utils/cwTiming.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +9 -0
- package/src/schema/__tests__/ability.test.ts +40 -0
- package/src/schema/__tests__/audio.schema.test.ts +4 -0
- package/src/schema/__tests__/cw-decoder.schema.test.ts +127 -0
- package/src/schema/__tests__/device-ui.schema.test.ts +122 -0
- package/src/schema/__tests__/operator.schema.test.ts +29 -0
- package/src/schema/__tests__/process-monitor.schema.test.ts +245 -0
- package/src/schema/__tests__/radio.schema.test.ts +160 -0
- package/src/schema/ability.ts +13 -0
- package/src/schema/api-response.schema.ts +22 -0
- package/src/schema/audio.schema.ts +3 -0
- package/src/schema/cw-decoder.schema.ts +234 -0
- package/src/schema/cw-keyer.schema.ts +177 -0
- package/src/schema/desktop-https.schema.ts +1 -1
- package/src/schema/device-ui.schema.ts +182 -0
- package/src/schema/mode.schema.ts +8 -0
- package/src/schema/operator.schema.ts +7 -1
- package/src/schema/plugin.schema.ts +28 -2
- package/src/schema/process-monitor.schema.ts +69 -0
- package/src/schema/radio-capability.schema.ts +41 -0
- package/src/schema/radio.schema.ts +97 -0
- package/src/schema/slot-info.schema.ts +33 -2
- package/src/schema/voice.schema.ts +1 -1
- package/src/schema/websocket.schema.ts +147 -4
- package/src/utils/__tests__/cwTiming.test.ts +91 -0
- package/src/utils/callsign.ts +9 -0
- package/src/utils/cwTiming.ts +203 -0
- package/test/decode-request-schema.test.ts +48 -0
package/dist/index.d.ts
CHANGED
|
@@ -41,8 +41,12 @@ export * from './schema/auth.schema.js';
|
|
|
41
41
|
export * from './schema/system.schema.js';
|
|
42
42
|
export * from './schema/voice.schema.js';
|
|
43
43
|
export * from './schema/voice-keyer.schema.js';
|
|
44
|
+
export * from './schema/cw-keyer.schema.js';
|
|
45
|
+
export * from './schema/cw-decoder.schema.js';
|
|
44
46
|
export * from './schema/station-info.schema.js';
|
|
45
47
|
export * from './utils/grid.js';
|
|
48
|
+
export * from './utils/callsign.js';
|
|
49
|
+
export * from './utils/cwTiming.js';
|
|
46
50
|
export * from './schema/process-monitor.schema.js';
|
|
47
51
|
export * from './schema/cpu-profile.schema.js';
|
|
48
52
|
export * from './schema/openwebrx.schema.js';
|
|
@@ -53,6 +57,7 @@ export * from './schema/audio-sidecar.schema.js';
|
|
|
53
57
|
export * from './schema/rigctld.schema.js';
|
|
54
58
|
export * from './schema/realtime.schema.js';
|
|
55
59
|
export * from './schema/desktop-https.schema.js';
|
|
60
|
+
export * from './schema/device-ui.schema.js';
|
|
56
61
|
export * from './schema/plugin.schema.js';
|
|
57
62
|
export * from './schema/update.schema.js';
|
|
58
63
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,QAAQ,EACT,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACd,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,sCAAsC,EACtC,kCAAkC,GAEnC,MAAM,8BAA8B,CAAC;AAGtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,8BAA8B,CAAC;AAG7C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,iCAAiC,CAAC;AAGhD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,qBAAqB,CAAC;AAGpC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAG/C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,QAAQ,EACT,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACd,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,sCAAsC,EACtC,kCAAkC,GAEnC,MAAM,8BAA8B,CAAC;AAGtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,8BAA8B,CAAC;AAG7C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,iCAAiC,CAAC;AAGhD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,qBAAqB,CAAC;AAGpC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAG/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oCAAoC,CAAC;AAGnD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,qCAAqC,CAAC;AAGpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,kCAAkC,CAAC;AAGjD,cAAc,4BAA4B,CAAC;AAG3C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,8BAA8B,CAAC;AAG7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -61,10 +61,15 @@ export * from './schema/system.schema.js';
|
|
|
61
61
|
// Voice Schema
|
|
62
62
|
export * from './schema/voice.schema.js';
|
|
63
63
|
export * from './schema/voice-keyer.schema.js';
|
|
64
|
+
// CW Keyer Schema
|
|
65
|
+
export * from './schema/cw-keyer.schema.js';
|
|
66
|
+
export * from './schema/cw-decoder.schema.js';
|
|
64
67
|
// Station Info Schema
|
|
65
68
|
export * from './schema/station-info.schema.js';
|
|
66
69
|
// Grid Utils
|
|
67
70
|
export * from './utils/grid.js';
|
|
71
|
+
export * from './utils/callsign.js';
|
|
72
|
+
export * from './utils/cwTiming.js';
|
|
68
73
|
// Process Monitor Schema
|
|
69
74
|
export * from './schema/process-monitor.schema.js';
|
|
70
75
|
// CPU Profile Schema
|
|
@@ -84,6 +89,8 @@ export * from './schema/rigctld.schema.js';
|
|
|
84
89
|
export * from './schema/realtime.schema.js';
|
|
85
90
|
// Desktop HTTPS Schema
|
|
86
91
|
export * from './schema/desktop-https.schema.js';
|
|
92
|
+
// Device UI Schema
|
|
93
|
+
export * from './schema/device-ui.schema.js';
|
|
87
94
|
// Plugin Schema
|
|
88
95
|
export * from './schema/plugin.schema.js';
|
|
89
96
|
export * from './schema/update.schema.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAEzC,oDAAoD;AACpD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAetC,OAAO,EACL,aAAa,EACd,MAAM,8BAA8B,CAAC;AActC,mBAAmB;AACnB,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AAEzC,WAAW;AACX,cAAc,0BAA0B,CAAC;AAEzC,YAAY;AACZ,cAAc,yBAAyB,CAAC;AAExC,eAAe;AACf,cAAc,0BAA0B,CAAC;AAEzC,eAAe;AACf,cAAc,0BAA0B,CAAC;AAEzC,aAAa;AACb,cAAc,wBAAwB,CAAC;AAEvC,eAAe;AACf,cAAc,0BAA0B,CAAC;AAEzC,cAAc;AACd,cAAc,yBAAyB,CAAC;AAExC,kBAAkB;AAClB,cAAc,6BAA6B,CAAC;AAE5C,eAAe;AACf,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,iBAAiB;AACjB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAEzC,sBAAsB;AACtB,cAAc,iCAAiC,CAAC;AAEhD,+BAA+B;AAC/B,cAAc,iCAAiC,CAAC;AAEhD,qBAAqB;AACrB,cAAc,gCAAgC,CAAC;AAE/C,uBAAuB;AACvB,cAAc,kCAAkC,CAAC;AAEjD,oEAAoE;AACpE,cAAc,qBAAqB,CAAC;AAEpC,cAAc;AACd,cAAc,yBAAyB,CAAC;AAExC,gBAAgB;AAChB,cAAc,2BAA2B,CAAC;AAE1C,eAAe;AACf,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAE/C,sBAAsB;AACtB,cAAc,iCAAiC,CAAC;AAEhD,aAAa;AACb,cAAc,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAEzC,oDAAoD;AACpD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAetC,OAAO,EACL,aAAa,EACd,MAAM,8BAA8B,CAAC;AActC,mBAAmB;AACnB,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AAEzC,WAAW;AACX,cAAc,0BAA0B,CAAC;AAEzC,YAAY;AACZ,cAAc,yBAAyB,CAAC;AAExC,eAAe;AACf,cAAc,0BAA0B,CAAC;AAEzC,eAAe;AACf,cAAc,0BAA0B,CAAC;AAEzC,aAAa;AACb,cAAc,wBAAwB,CAAC;AAEvC,eAAe;AACf,cAAc,0BAA0B,CAAC;AAEzC,cAAc;AACd,cAAc,yBAAyB,CAAC;AAExC,kBAAkB;AAClB,cAAc,6BAA6B,CAAC;AAE5C,eAAe;AACf,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,iBAAiB;AACjB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAEzC,sBAAsB;AACtB,cAAc,iCAAiC,CAAC;AAEhD,+BAA+B;AAC/B,cAAc,iCAAiC,CAAC;AAEhD,qBAAqB;AACrB,cAAc,gCAAgC,CAAC;AAE/C,uBAAuB;AACvB,cAAc,kCAAkC,CAAC;AAEjD,oEAAoE;AACpE,cAAc,qBAAqB,CAAC;AAEpC,cAAc;AACd,cAAc,yBAAyB,CAAC;AAExC,gBAAgB;AAChB,cAAc,2BAA2B,CAAC;AAE1C,eAAe;AACf,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAE/C,kBAAkB;AAClB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAE9C,sBAAsB;AACtB,cAAc,iCAAiC,CAAC;AAEhD,aAAa;AACb,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAEpC,yBAAyB;AACzB,cAAc,oCAAoC,CAAC;AAEnD,qBAAqB;AACrB,cAAc,gCAAgC,CAAC;AAE/C,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,0BAA0B;AAC1B,cAAc,qCAAqC,CAAC;AAEpD,qBAAqB;AACrB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAEhD,uBAAuB;AACvB,cAAc,kCAAkC,CAAC;AAEjD,wBAAwB;AACxB,cAAc,4BAA4B,CAAC;AAE3C,kBAAkB;AAClB,cAAc,6BAA6B,CAAC;AAE5C,uBAAuB;AACvB,cAAc,kCAAkC,CAAC;AAEjD,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,gBAAgB;AAChB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ability.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/ability.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { buildAbilityRules, Permission, PERMISSION_GROUPS, PERMISSION_RULE_MAP, } from '../ability.js';
|
|
3
|
+
import { UserRole } from '../auth.schema.js';
|
|
4
|
+
describe('ability contracts', () => {
|
|
5
|
+
it('maps CW decoder permissions to separate control and config capabilities', () => {
|
|
6
|
+
expect(PERMISSION_RULE_MAP[Permission.CW_DECODER_CONTROL]).toEqual({
|
|
7
|
+
action: 'execute',
|
|
8
|
+
subject: 'CWDecoder',
|
|
9
|
+
});
|
|
10
|
+
expect(PERMISSION_RULE_MAP[Permission.CW_DECODER_CONFIG]).toEqual({
|
|
11
|
+
action: 'update',
|
|
12
|
+
subject: 'CWDecoderConfig',
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
it('keeps CW decoder permissions delegatable instead of granting them to every operator', () => {
|
|
16
|
+
expect(buildAbilityRules({ role: UserRole.OPERATOR, operatorIds: ['op1'] }))
|
|
17
|
+
.not.toContainEqual({ action: 'execute', subject: 'CWDecoder' });
|
|
18
|
+
expect(buildAbilityRules({
|
|
19
|
+
role: UserRole.OPERATOR,
|
|
20
|
+
operatorIds: ['op1'],
|
|
21
|
+
permissionGrants: [{ permission: Permission.CW_DECODER_CONTROL }],
|
|
22
|
+
})).toContainEqual({ action: 'execute', subject: 'CWDecoder' });
|
|
23
|
+
});
|
|
24
|
+
it('exposes CW permissions in the token permission groups', () => {
|
|
25
|
+
const cwGroup = PERMISSION_GROUPS.find(group => group.key === 'cw');
|
|
26
|
+
expect(cwGroup?.permissions).toEqual([
|
|
27
|
+
Permission.CW_DECODER_CONTROL,
|
|
28
|
+
Permission.CW_DECODER_CONFIG,
|
|
29
|
+
]);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=ability.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ability.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/ability.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;YACjE,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;YAChE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACzE,GAAG,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,iBAAiB,CAAC;YACvB,IAAI,EAAE,QAAQ,CAAC,QAAQ;YACvB,WAAW,EAAE,CAAC,KAAK,CAAC;YACpB,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC;SAClE,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC;YACnC,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,iBAAiB;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -8,6 +8,9 @@ const device = {
|
|
|
8
8
|
sampleRate: 48000,
|
|
9
9
|
sampleRates: [44100, 48000],
|
|
10
10
|
type: 'input',
|
|
11
|
+
availability: 'available',
|
|
12
|
+
isActiveByTx5dr: false,
|
|
13
|
+
lastSeenAt: 1_700_000_000_000,
|
|
11
14
|
};
|
|
12
15
|
describe('audio device resolution schemas', () => {
|
|
13
16
|
it('accepts every resolution status', () => {
|
|
@@ -56,6 +59,7 @@ describe('audio device resolution schemas', () => {
|
|
|
56
59
|
outputBufferSizes: [128, 256, 512, 768, 1024],
|
|
57
60
|
});
|
|
58
61
|
expect(parsed.inputDevices[0]?.sampleRates).toEqual([44100, 48000]);
|
|
62
|
+
expect(parsed.inputDevices[0]?.availability).toBe('available');
|
|
59
63
|
expect(parsed.inputBufferSizes).toContain(768);
|
|
60
64
|
});
|
|
61
65
|
it('accepts legacy and split audio settings', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/audio.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,EACjC,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAC3B,IAAI,EAAE,OAAgB;
|
|
1
|
+
{"version":3,"file":"audio.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/audio.schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cw-decoder.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/cw-decoder.schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { CWDecoderConfigSchema, CWDecoderEventSchema, CWDecoderStatusSchema, CWDecoderTuningUpdateSchema, } from '../cw-decoder.schema.js';
|
|
3
|
+
describe('CW decoder contracts', () => {
|
|
4
|
+
it('parses v1 defaults', () => {
|
|
5
|
+
expect(CWDecoderConfigSchema.parse({})).toMatchObject({
|
|
6
|
+
enabled: false,
|
|
7
|
+
backend: 'deepcw-onnx',
|
|
8
|
+
runtimeBackend: 'cpu',
|
|
9
|
+
modelSize: 'tiny',
|
|
10
|
+
language: 'en',
|
|
11
|
+
mode: 'streaming',
|
|
12
|
+
targetFreqHz: 800,
|
|
13
|
+
filterWidthHz: 800,
|
|
14
|
+
windowSeconds: 12,
|
|
15
|
+
decodeIntervalMs: 1000,
|
|
16
|
+
muteWhileTransmitting: true,
|
|
17
|
+
workerCount: 1,
|
|
18
|
+
minCommitChars: 1,
|
|
19
|
+
commitStability: 2,
|
|
20
|
+
maxPendingAgeMs: 4000,
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
it('accepts pending and commit transcript events', () => {
|
|
24
|
+
expect(CWDecoderEventSchema.parse({
|
|
25
|
+
kind: 'pending',
|
|
26
|
+
text: 'CQ TEST',
|
|
27
|
+
confidence: 0.8,
|
|
28
|
+
timestamp: 1,
|
|
29
|
+
})).toMatchObject({ kind: 'pending', text: 'CQ TEST' });
|
|
30
|
+
expect(CWDecoderEventSchema.parse({
|
|
31
|
+
kind: 'commit',
|
|
32
|
+
text: 'CQ TEST',
|
|
33
|
+
confidence: 0.9,
|
|
34
|
+
timestamp: 2,
|
|
35
|
+
segment: {
|
|
36
|
+
id: 'seg-1',
|
|
37
|
+
sessionId: 'session-1',
|
|
38
|
+
sequence: 1,
|
|
39
|
+
text: 'CQ TEST',
|
|
40
|
+
startedAt: 1,
|
|
41
|
+
updatedAt: 2,
|
|
42
|
+
endedAt: 2,
|
|
43
|
+
confidence: 0.9,
|
|
44
|
+
finalized: true,
|
|
45
|
+
prependSpace: true,
|
|
46
|
+
},
|
|
47
|
+
})).toMatchObject({ kind: 'commit', segment: { finalized: true } });
|
|
48
|
+
});
|
|
49
|
+
it('accepts structured transcript reset, pending, and commit events', () => {
|
|
50
|
+
expect(CWDecoderEventSchema.parse({
|
|
51
|
+
kind: 'transcript_reset',
|
|
52
|
+
sessionId: 'session-1',
|
|
53
|
+
timestamp: 1,
|
|
54
|
+
})).toMatchObject({ kind: 'transcript_reset', sessionId: 'session-1' });
|
|
55
|
+
expect(CWDecoderEventSchema.parse({
|
|
56
|
+
kind: 'transcript_pending',
|
|
57
|
+
pending: {
|
|
58
|
+
sessionId: 'session-1',
|
|
59
|
+
version: 1,
|
|
60
|
+
text: 'CQ TE',
|
|
61
|
+
plainText: 'CQ TE',
|
|
62
|
+
finalized: false,
|
|
63
|
+
confidence: 0.7,
|
|
64
|
+
targetFreqHz: 800,
|
|
65
|
+
filterWidthHz: 800,
|
|
66
|
+
updatedAt: 2,
|
|
67
|
+
},
|
|
68
|
+
timestamp: 2,
|
|
69
|
+
})).toMatchObject({ kind: 'transcript_pending', pending: { finalized: false, version: 1 } });
|
|
70
|
+
expect(CWDecoderEventSchema.parse({
|
|
71
|
+
kind: 'transcript_commit',
|
|
72
|
+
segment: {
|
|
73
|
+
id: 'seg-1',
|
|
74
|
+
sessionId: 'session-1',
|
|
75
|
+
sequence: 1,
|
|
76
|
+
text: 'CQ TEST',
|
|
77
|
+
plainText: 'CQ TEST',
|
|
78
|
+
finalized: true,
|
|
79
|
+
prependSpace: false,
|
|
80
|
+
confidence: 0.9,
|
|
81
|
+
targetFreqHz: 800,
|
|
82
|
+
filterWidthHz: 800,
|
|
83
|
+
characterSpans: [{ char: 'C', startFrame: 1, endFrame: 2 }],
|
|
84
|
+
wordSpaceSpans: [{ startFrame: 10, endFrame: 12 }],
|
|
85
|
+
startedAt: 1,
|
|
86
|
+
endedAt: 3,
|
|
87
|
+
updatedAt: 3,
|
|
88
|
+
},
|
|
89
|
+
timestamp: 3,
|
|
90
|
+
})).toMatchObject({ kind: 'transcript_commit', segment: { sequence: 1, prependSpace: false } });
|
|
91
|
+
});
|
|
92
|
+
it('rejects model sizes that are not packaged in v1', () => {
|
|
93
|
+
expect(() => CWDecoderConfigSchema.parse({ modelSize: 'base' })).toThrow();
|
|
94
|
+
});
|
|
95
|
+
it('validates runtime tuning updates', () => {
|
|
96
|
+
expect(CWDecoderTuningUpdateSchema.parse({ targetFreqHz: 650 })).toEqual({ targetFreqHz: 650 });
|
|
97
|
+
expect(CWDecoderTuningUpdateSchema.parse({ filterWidthHz: 250 })).toEqual({ filterWidthHz: 250 });
|
|
98
|
+
expect(() => CWDecoderTuningUpdateSchema.parse({})).toThrow();
|
|
99
|
+
expect(() => CWDecoderTuningUpdateSchema.parse({ targetFreqHz: 50 })).toThrow();
|
|
100
|
+
expect(() => CWDecoderTuningUpdateSchema.parse({ filterWidthHz: 900 })).toThrow();
|
|
101
|
+
});
|
|
102
|
+
it('represents muted listening state', () => {
|
|
103
|
+
const config = CWDecoderConfigSchema.parse({ enabled: true });
|
|
104
|
+
expect(CWDecoderStatusSchema.parse({
|
|
105
|
+
enabled: true,
|
|
106
|
+
state: 'muted',
|
|
107
|
+
config,
|
|
108
|
+
muted: true,
|
|
109
|
+
active: false,
|
|
110
|
+
updatedAt: 3,
|
|
111
|
+
})).toMatchObject({ state: 'muted', muted: true });
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=cw-decoder.schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cw-decoder.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/cw-decoder.schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-ui.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/device-ui.schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { DeviceUiBootstrapSnapshotSchema, DeviceUiWsEventSchema, DeviceUiJwtPayloadSchema, DeviceUiSessionRequestSchema, DeviceUiSessionResponseSchema, } from '../device-ui.schema.js';
|
|
3
|
+
describe('device UI schemas', () => {
|
|
4
|
+
it('accepts the dedicated device UI JWT payload only', () => {
|
|
5
|
+
expect(DeviceUiJwtPayloadSchema.parse({
|
|
6
|
+
typ: 'device-ui',
|
|
7
|
+
aud: 'tx5dr-device-ui',
|
|
8
|
+
deviceId: 'panel-1',
|
|
9
|
+
sessionId: 'session-1',
|
|
10
|
+
iat: 1,
|
|
11
|
+
exp: 2,
|
|
12
|
+
}).aud).toBe('tx5dr-device-ui');
|
|
13
|
+
expect(() => DeviceUiJwtPayloadSchema.parse({
|
|
14
|
+
typ: 'access',
|
|
15
|
+
aud: 'tx5dr-device-ui',
|
|
16
|
+
deviceId: 'panel-1',
|
|
17
|
+
sessionId: 'session-1',
|
|
18
|
+
iat: 1,
|
|
19
|
+
exp: 2,
|
|
20
|
+
})).toThrow();
|
|
21
|
+
});
|
|
22
|
+
it('describes session request and response contracts', () => {
|
|
23
|
+
expect(DeviceUiSessionRequestSchema.parse({ deviceId: 'panel-1', sessionToken: 'secret' }).deviceId).toBe('panel-1');
|
|
24
|
+
expect(DeviceUiSessionResponseSchema.parse({
|
|
25
|
+
jwt: 'jwt',
|
|
26
|
+
deviceId: 'panel-1',
|
|
27
|
+
sessionId: 'session-1',
|
|
28
|
+
expiresAt: 1_700_000_001_000,
|
|
29
|
+
}).sessionId).toBe('session-1');
|
|
30
|
+
});
|
|
31
|
+
it('describes the mode-aware bootstrap snapshot and WS event', () => {
|
|
32
|
+
const snapshot = DeviceUiBootstrapSnapshotSchema.parse({
|
|
33
|
+
server: { status: 'ok', version: 'test', webPort: 8076 },
|
|
34
|
+
station: { callsign: 'BG5DRB', callsigns: ['BG5DRB', 'BG5AAA'] },
|
|
35
|
+
operators: [{ id: 'op1', callsign: 'BG5AAA', active: true, transmitting: false, ptt: false }],
|
|
36
|
+
engine: { running: true, mode: 'digital', currentMode: { name: 'FT8', slotMs: 15000 }, state: 'running' },
|
|
37
|
+
radio: { connected: true, frequency: 7074000, radioMode: 'USB-D', ptt: false, tx: false },
|
|
38
|
+
ft8: {
|
|
39
|
+
slot: null,
|
|
40
|
+
utc: null,
|
|
41
|
+
cycle: null,
|
|
42
|
+
periodMs: 15000,
|
|
43
|
+
recentDecodeRawMessages: ['CQ TEST AA00'],
|
|
44
|
+
lastDecodeRawMessage: 'CQ TEST AA00',
|
|
45
|
+
recentFramesSlotId: 'FT8-1',
|
|
46
|
+
recentFramesSlotStartMs: 1_700_000_000_000,
|
|
47
|
+
recentFrames: [{
|
|
48
|
+
slotId: 'FT8-1',
|
|
49
|
+
slotStartMs: 1_700_000_000_000,
|
|
50
|
+
snr: -10,
|
|
51
|
+
freq: 1200,
|
|
52
|
+
dt: 0.1,
|
|
53
|
+
message: 'CQ TEST AA00',
|
|
54
|
+
operatorId: null,
|
|
55
|
+
countryZh: '测试地区',
|
|
56
|
+
countryEn: 'Test Region',
|
|
57
|
+
}],
|
|
58
|
+
currentTx: { active: false, operatorIds: [], messages: [], lastMessage: null, slotStartMs: null },
|
|
59
|
+
},
|
|
60
|
+
voice: {
|
|
61
|
+
active: false,
|
|
62
|
+
radioMode: null,
|
|
63
|
+
pttLocked: false,
|
|
64
|
+
pttLockedByLabel: null,
|
|
65
|
+
keyerActive: false,
|
|
66
|
+
keyerMode: null,
|
|
67
|
+
keyerSlotId: null,
|
|
68
|
+
},
|
|
69
|
+
cw: {
|
|
70
|
+
decoder: {
|
|
71
|
+
enabled: false,
|
|
72
|
+
active: false,
|
|
73
|
+
state: 'disabled',
|
|
74
|
+
muted: false,
|
|
75
|
+
pendingText: '',
|
|
76
|
+
committedText: '',
|
|
77
|
+
lastDecodeAt: null,
|
|
78
|
+
updatedAt: 1,
|
|
79
|
+
},
|
|
80
|
+
keyer: {
|
|
81
|
+
active: false,
|
|
82
|
+
mode: null,
|
|
83
|
+
messageId: null,
|
|
84
|
+
currentText: null,
|
|
85
|
+
lastText: null,
|
|
86
|
+
},
|
|
87
|
+
currentTx: {
|
|
88
|
+
active: false,
|
|
89
|
+
messages: [],
|
|
90
|
+
lastMessage: null,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
access: { localUrl: 'http://192.168.1.10:8076', localUrls: ['http://192.168.1.10:8076'] },
|
|
94
|
+
updatedAt: 1,
|
|
95
|
+
});
|
|
96
|
+
expect(snapshot.station.callsign).toBe('BG5DRB');
|
|
97
|
+
expect(snapshot.station.callsigns).toEqual(['BG5DRB', 'BG5AAA']);
|
|
98
|
+
expect(snapshot.operators[0]?.callsign).toBe('BG5AAA');
|
|
99
|
+
expect(snapshot.ft8.recentFramesSlotId).toBe('FT8-1');
|
|
100
|
+
expect(snapshot.ft8.recentFrames[0]?.slotId).toBe('FT8-1');
|
|
101
|
+
expect(snapshot.ft8.recentFrames[0]?.countryZh).toBe('测试地区');
|
|
102
|
+
expect(snapshot.ft8.lastDecodeRawMessage).toBe('CQ TEST AA00');
|
|
103
|
+
expect(snapshot.cw.decoder.state).toBe('disabled');
|
|
104
|
+
expect(DeviceUiWsEventSchema.parse({
|
|
105
|
+
type: 'snapshot',
|
|
106
|
+
payload: snapshot,
|
|
107
|
+
timestamp: '2026-05-14T00:00:00.000Z',
|
|
108
|
+
}).payload.server.status).toBe('ok');
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=device-ui.schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-ui.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/device-ui.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,+BAA+B,EAC/B,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC;YACpC,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,iBAAiB;YACtB,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,WAAW;YACtB,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;SACP,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEhC,MAAM,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC;YAC1C,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,iBAAiB;YACtB,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,WAAW;YACtB,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;SACP,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrH,MAAM,CAAC,6BAA6B,CAAC,KAAK,CAAC;YACzC,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,QAAQ,GAAG,+BAA+B,CAAC,KAAK,CAAC;YACrD,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;YACxD,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YAChE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YAC7F,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YACzG,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;YACzF,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,KAAK;gBACf,uBAAuB,EAAE,CAAC,cAAc,CAAC;gBACzC,oBAAoB,EAAE,cAAc;gBACpC,kBAAkB,EAAE,OAAO;gBAC3B,uBAAuB,EAAE,iBAAiB;gBAC1C,YAAY,EAAE,CAAC;wBACb,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,iBAAiB;wBAC9B,GAAG,EAAE,CAAC,EAAE;wBACR,IAAI,EAAE,IAAI;wBACV,EAAE,EAAE,GAAG;wBACP,OAAO,EAAE,cAAc;wBACvB,UAAU,EAAE,IAAI;wBAChB,SAAS,EAAE,MAAM;wBACjB,SAAS,EAAE,aAAa;qBACzB,CAAC;gBACF,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;aAClG;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,KAAK;gBAChB,gBAAgB,EAAE,IAAI;gBACtB,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;aAClB;YACD,EAAE,EAAE;gBACF,OAAO,EAAE;oBACP,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,EAAE;oBACf,aAAa,EAAE,EAAE;oBACjB,YAAY,EAAE,IAAI;oBAClB,SAAS,EAAE,CAAC;iBACb;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,IAAI;oBACV,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,IAAI;oBACjB,QAAQ,EAAE,IAAI;iBACf;gBACD,SAAS,EAAE;oBACT,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,IAAI;iBAClB;aACF;YACD,MAAM,EAAE,EAAE,QAAQ,EAAE,0BAA0B,EAAE,SAAS,EAAE,CAAC,0BAA0B,CAAC,EAAE;YACzF,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC;YACjC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/operator.schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { CreateRadioOperatorRequestSchema, UpdateRadioOperatorRequestSchema, sanitizeCallsignInput } from '../../index.js';
|
|
3
|
+
import { MODES } from '../mode.schema.js';
|
|
4
|
+
describe('operator callsign normalization', () => {
|
|
5
|
+
it('uppercases callsigns while preserving portable separators', () => {
|
|
6
|
+
expect(sanitizeCallsignInput(' bg5abc/p ')).toBe('BG5ABC/P');
|
|
7
|
+
});
|
|
8
|
+
it('normalizes callsigns in create and update payloads', () => {
|
|
9
|
+
const createPayload = CreateRadioOperatorRequestSchema.parse({
|
|
10
|
+
myCallsign: 'bg5abc/p',
|
|
11
|
+
myGrid: 'OL63',
|
|
12
|
+
frequency: 1000,
|
|
13
|
+
transmitCycles: [0],
|
|
14
|
+
mode: MODES.FT8,
|
|
15
|
+
});
|
|
16
|
+
const updatePayload = UpdateRadioOperatorRequestSchema.parse({
|
|
17
|
+
myCallsign: 'vk9/bg3yza',
|
|
18
|
+
});
|
|
19
|
+
expect(createPayload.myCallsign).toBe('BG5ABC/P');
|
|
20
|
+
expect(updatePayload.myCallsign).toBe('VK9/BG3YZA');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=operator.schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/operator.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAChC,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC;YAC3D,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,CAAC,CAAC,CAAC;YACnB,IAAI,EAAE,KAAK,CAAC,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC;YAC3D,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-monitor.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/process-monitor.schema.test.ts"],"names":[],"mappings":""}
|