@tx5dr/contracts 1.7.12 → 2.0.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 (195) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/schema/__tests__/android-operator-audio.schema.test.d.ts +2 -0
  6. package/dist/schema/__tests__/android-operator-audio.schema.test.d.ts.map +1 -0
  7. package/dist/schema/__tests__/android-operator-audio.schema.test.js +27 -0
  8. package/dist/schema/__tests__/android-operator-audio.schema.test.js.map +1 -0
  9. package/dist/schema/__tests__/assisted-queue.schema.test.d.ts +2 -0
  10. package/dist/schema/__tests__/assisted-queue.schema.test.d.ts.map +1 -0
  11. package/dist/schema/__tests__/assisted-queue.schema.test.js +113 -0
  12. package/dist/schema/__tests__/assisted-queue.schema.test.js.map +1 -0
  13. package/dist/schema/__tests__/audio-sidecar.schema.test.d.ts +2 -0
  14. package/dist/schema/__tests__/audio-sidecar.schema.test.d.ts.map +1 -0
  15. package/dist/schema/__tests__/audio-sidecar.schema.test.js +42 -0
  16. package/dist/schema/__tests__/audio-sidecar.schema.test.js.map +1 -0
  17. package/dist/schema/__tests__/audio.schema.test.js +92 -1
  18. package/dist/schema/__tests__/audio.schema.test.js.map +1 -1
  19. package/dist/schema/__tests__/diagnostics.schema.test.d.ts +2 -0
  20. package/dist/schema/__tests__/diagnostics.schema.test.d.ts.map +1 -0
  21. package/dist/schema/__tests__/diagnostics.schema.test.js +31 -0
  22. package/dist/schema/__tests__/diagnostics.schema.test.js.map +1 -0
  23. package/dist/schema/__tests__/logbook-health.schema.test.d.ts +2 -0
  24. package/dist/schema/__tests__/logbook-health.schema.test.d.ts.map +1 -0
  25. package/dist/schema/__tests__/logbook-health.schema.test.js +104 -0
  26. package/dist/schema/__tests__/logbook-health.schema.test.js.map +1 -0
  27. package/dist/schema/__tests__/observability.schema.test.d.ts +2 -0
  28. package/dist/schema/__tests__/observability.schema.test.d.ts.map +1 -0
  29. package/dist/schema/__tests__/observability.schema.test.js +12 -0
  30. package/dist/schema/__tests__/observability.schema.test.js.map +1 -0
  31. package/dist/schema/__tests__/operator.schema.test.js +9 -3
  32. package/dist/schema/__tests__/operator.schema.test.js.map +1 -1
  33. package/dist/schema/__tests__/plugin-market.schema.test.js +43 -1
  34. package/dist/schema/__tests__/plugin-market.schema.test.js.map +1 -1
  35. package/dist/schema/__tests__/radio-power-support.test.js +12 -0
  36. package/dist/schema/__tests__/radio-power-support.test.js.map +1 -1
  37. package/dist/schema/__tests__/radio-profile.schema.test.d.ts +2 -0
  38. package/dist/schema/__tests__/radio-profile.schema.test.d.ts.map +1 -0
  39. package/dist/schema/__tests__/radio-profile.schema.test.js +36 -0
  40. package/dist/schema/__tests__/radio-profile.schema.test.js.map +1 -0
  41. package/dist/schema/__tests__/radio.schema.test.js +41 -1
  42. package/dist/schema/__tests__/radio.schema.test.js.map +1 -1
  43. package/dist/schema/__tests__/realtime-settings.schema.test.js +2 -1
  44. package/dist/schema/__tests__/realtime-settings.schema.test.js.map +1 -1
  45. package/dist/schema/__tests__/remote-access.schema.test.d.ts +2 -0
  46. package/dist/schema/__tests__/remote-access.schema.test.d.ts.map +1 -0
  47. package/dist/schema/__tests__/remote-access.schema.test.js +18 -0
  48. package/dist/schema/__tests__/remote-access.schema.test.js.map +1 -0
  49. package/dist/schema/android-operator-audio.schema.d.ts +174 -0
  50. package/dist/schema/android-operator-audio.schema.d.ts.map +1 -0
  51. package/dist/schema/android-operator-audio.schema.js +38 -0
  52. package/dist/schema/android-operator-audio.schema.js.map +1 -0
  53. package/dist/schema/api-response.schema.d.ts +268 -44
  54. package/dist/schema/api-response.schema.d.ts.map +1 -1
  55. package/dist/schema/audio-sidecar.schema.d.ts +75 -0
  56. package/dist/schema/audio-sidecar.schema.d.ts.map +1 -1
  57. package/dist/schema/audio-sidecar.schema.js +32 -0
  58. package/dist/schema/audio-sidecar.schema.js.map +1 -1
  59. package/dist/schema/audio.schema.d.ts +4749 -3
  60. package/dist/schema/audio.schema.d.ts.map +1 -1
  61. package/dist/schema/audio.schema.js +101 -2
  62. package/dist/schema/audio.schema.js.map +1 -1
  63. package/dist/schema/auth.schema.d.ts +171 -12
  64. package/dist/schema/auth.schema.d.ts.map +1 -1
  65. package/dist/schema/auth.schema.js +65 -1
  66. package/dist/schema/auth.schema.js.map +1 -1
  67. package/dist/schema/cpu-profile.schema.d.ts +2 -2
  68. package/dist/schema/cw-decoder.schema.d.ts +74 -74
  69. package/dist/schema/cw-keyer.schema.d.ts +20 -14
  70. package/dist/schema/cw-keyer.schema.d.ts.map +1 -1
  71. package/dist/schema/cw-keyer.schema.js +3 -0
  72. package/dist/schema/cw-keyer.schema.js.map +1 -1
  73. package/dist/schema/desktop-https.schema.d.ts +6 -6
  74. package/dist/schema/device-ui.schema.d.ts +6 -6
  75. package/dist/schema/diagnostics.schema.d.ts +163 -0
  76. package/dist/schema/diagnostics.schema.d.ts.map +1 -0
  77. package/dist/schema/diagnostics.schema.js +46 -0
  78. package/dist/schema/diagnostics.schema.js.map +1 -0
  79. package/dist/schema/ft8.schema.d.ts +12 -2
  80. package/dist/schema/ft8.schema.d.ts.map +1 -1
  81. package/dist/schema/ft8.schema.js +8 -0
  82. package/dist/schema/ft8.schema.js.map +1 -1
  83. package/dist/schema/logbook.schema.d.ts +1940 -18
  84. package/dist/schema/logbook.schema.d.ts.map +1 -1
  85. package/dist/schema/logbook.schema.js +158 -1
  86. package/dist/schema/logbook.schema.js.map +1 -1
  87. package/dist/schema/mode.schema.d.ts +2 -6
  88. package/dist/schema/mode.schema.d.ts.map +1 -1
  89. package/dist/schema/mode.schema.js +2 -6
  90. package/dist/schema/mode.schema.js.map +1 -1
  91. package/dist/schema/observability.schema.d.ts +66 -0
  92. package/dist/schema/observability.schema.d.ts.map +1 -0
  93. package/dist/schema/observability.schema.js +20 -0
  94. package/dist/schema/observability.schema.js.map +1 -0
  95. package/dist/schema/operator.schema.d.ts +6 -6
  96. package/dist/schema/operator.schema.d.ts.map +1 -1
  97. package/dist/schema/operator.schema.js +6 -1
  98. package/dist/schema/operator.schema.js.map +1 -1
  99. package/dist/schema/plugin.schema.d.ts +258 -78
  100. package/dist/schema/plugin.schema.d.ts.map +1 -1
  101. package/dist/schema/plugin.schema.js +57 -2
  102. package/dist/schema/plugin.schema.js.map +1 -1
  103. package/dist/schema/process-monitor.schema.d.ts +132 -132
  104. package/dist/schema/pskreporter.schema.d.ts +1 -3
  105. package/dist/schema/pskreporter.schema.d.ts.map +1 -1
  106. package/dist/schema/pskreporter.schema.js +1 -3
  107. package/dist/schema/pskreporter.schema.js.map +1 -1
  108. package/dist/schema/qso.schema.d.ts +7 -0
  109. package/dist/schema/qso.schema.d.ts.map +1 -1
  110. package/dist/schema/qso.schema.js +7 -0
  111. package/dist/schema/qso.schema.js.map +1 -1
  112. package/dist/schema/radio-capability.schema.d.ts +31 -40
  113. package/dist/schema/radio-capability.schema.d.ts.map +1 -1
  114. package/dist/schema/radio-capability.schema.js +7 -15
  115. package/dist/schema/radio-capability.schema.js.map +1 -1
  116. package/dist/schema/radio-power-support.d.ts.map +1 -1
  117. package/dist/schema/radio-power-support.js +3 -0
  118. package/dist/schema/radio-power-support.js.map +1 -1
  119. package/dist/schema/radio-power.schema.d.ts +87 -13
  120. package/dist/schema/radio-power.schema.d.ts.map +1 -1
  121. package/dist/schema/radio-power.schema.js +15 -8
  122. package/dist/schema/radio-power.schema.js.map +1 -1
  123. package/dist/schema/radio-profile.schema.d.ts +1240 -97
  124. package/dist/schema/radio-profile.schema.d.ts.map +1 -1
  125. package/dist/schema/radio.schema.d.ts +271 -48
  126. package/dist/schema/radio.schema.d.ts.map +1 -1
  127. package/dist/schema/radio.schema.js +44 -5
  128. package/dist/schema/radio.schema.js.map +1 -1
  129. package/dist/schema/realtime.schema.d.ts +60 -52
  130. package/dist/schema/realtime.schema.d.ts.map +1 -1
  131. package/dist/schema/realtime.schema.js +9 -1
  132. package/dist/schema/realtime.schema.js.map +1 -1
  133. package/dist/schema/slot-info.schema.d.ts +15 -9
  134. package/dist/schema/slot-info.schema.d.ts.map +1 -1
  135. package/dist/schema/slot-info.schema.js +15 -9
  136. package/dist/schema/slot-info.schema.js.map +1 -1
  137. package/dist/schema/spectrum.schema.d.ts +12 -12
  138. package/dist/schema/station-info.schema.d.ts +5 -0
  139. package/dist/schema/station-info.schema.d.ts.map +1 -1
  140. package/dist/schema/station-info.schema.js +5 -0
  141. package/dist/schema/station-info.schema.js.map +1 -1
  142. package/dist/schema/system.schema.d.ts +56 -6
  143. package/dist/schema/system.schema.d.ts.map +1 -1
  144. package/dist/schema/system.schema.js +22 -0
  145. package/dist/schema/system.schema.js.map +1 -1
  146. package/dist/schema/transmission.schema.d.ts +1 -7
  147. package/dist/schema/transmission.schema.d.ts.map +1 -1
  148. package/dist/schema/transmission.schema.js +2 -7
  149. package/dist/schema/transmission.schema.js.map +1 -1
  150. package/dist/schema/voice-keyer.schema.d.ts +16 -16
  151. package/dist/schema/websocket.schema.d.ts +3582 -555
  152. package/dist/schema/websocket.schema.d.ts.map +1 -1
  153. package/dist/schema/websocket.schema.js +160 -3
  154. package/dist/schema/websocket.schema.js.map +1 -1
  155. package/package.json +6 -1
  156. package/src/index.ts +3 -0
  157. package/src/schema/__tests__/android-operator-audio.schema.test.ts +31 -0
  158. package/src/schema/__tests__/assisted-queue.schema.test.ts +121 -0
  159. package/src/schema/__tests__/audio-sidecar.schema.test.ts +48 -0
  160. package/src/schema/__tests__/audio.schema.test.ts +102 -0
  161. package/src/schema/__tests__/diagnostics.schema.test.ts +32 -0
  162. package/src/schema/__tests__/logbook-health.schema.test.ts +117 -0
  163. package/src/schema/__tests__/observability.schema.test.ts +15 -0
  164. package/src/schema/__tests__/operator.schema.test.ts +11 -3
  165. package/src/schema/__tests__/plugin-market.schema.test.ts +49 -0
  166. package/src/schema/__tests__/radio-power-support.test.ts +14 -0
  167. package/src/schema/__tests__/radio-profile.schema.test.ts +44 -0
  168. package/src/schema/__tests__/radio.schema.test.ts +49 -1
  169. package/src/schema/__tests__/realtime-settings.schema.test.ts +2 -1
  170. package/src/schema/__tests__/remote-access.schema.test.ts +22 -0
  171. package/src/schema/android-operator-audio.schema.ts +49 -0
  172. package/src/schema/audio-sidecar.schema.ts +35 -0
  173. package/src/schema/audio.schema.ts +115 -2
  174. package/src/schema/auth.schema.ts +79 -1
  175. package/src/schema/cw-keyer.schema.ts +5 -0
  176. package/src/schema/diagnostics.schema.ts +55 -0
  177. package/src/schema/ft8.schema.ts +8 -0
  178. package/src/schema/logbook.schema.ts +204 -1
  179. package/src/schema/mode.schema.ts +2 -6
  180. package/src/schema/observability.schema.ts +26 -0
  181. package/src/schema/operator.schema.ts +7 -1
  182. package/src/schema/plugin.schema.ts +67 -2
  183. package/src/schema/pskreporter.schema.ts +1 -3
  184. package/src/schema/qso.schema.ts +7 -0
  185. package/src/schema/radio-capability.schema.ts +7 -15
  186. package/src/schema/radio-power-support.ts +3 -0
  187. package/src/schema/radio-power.schema.ts +15 -8
  188. package/src/schema/radio.schema.ts +55 -5
  189. package/src/schema/realtime.schema.ts +9 -1
  190. package/src/schema/slot-info.schema.ts +16 -10
  191. package/src/schema/station-info.schema.ts +5 -0
  192. package/src/schema/system.schema.ts +29 -0
  193. package/src/schema/transmission.schema.ts +2 -7
  194. package/src/schema/websocket.schema.ts +223 -6
  195. package/test/radio-capability-schema.test.ts +44 -0
package/dist/index.d.ts CHANGED
@@ -56,8 +56,11 @@ export * from './schema/radio-power-support.js';
56
56
  export * from './schema/audio-sidecar.schema.js';
57
57
  export * from './schema/rigctld.schema.js';
58
58
  export * from './schema/realtime.schema.js';
59
+ export * from './schema/android-operator-audio.schema.js';
59
60
  export * from './schema/desktop-https.schema.js';
60
61
  export * from './schema/device-ui.schema.js';
61
62
  export * from './schema/plugin.schema.js';
62
63
  export * from './schema/update.schema.js';
64
+ export * from './schema/observability.schema.js';
65
+ export * from './schema/diagnostics.schema.js';
63
66
  //# sourceMappingURL=index.d.ts.map
@@ -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,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"}
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;AAC5C,cAAc,2CAA2C,CAAC;AAG1D,cAAc,kCAAkC,CAAC;AAGjD,cAAc,8BAA8B,CAAC;AAG7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -87,6 +87,7 @@ export * from './schema/audio-sidecar.schema.js';
87
87
  export * from './schema/rigctld.schema.js';
88
88
  // Realtime Schema
89
89
  export * from './schema/realtime.schema.js';
90
+ export * from './schema/android-operator-audio.schema.js';
90
91
  // Desktop HTTPS Schema
91
92
  export * from './schema/desktop-https.schema.js';
92
93
  // Device UI Schema
@@ -94,4 +95,6 @@ export * from './schema/device-ui.schema.js';
94
95
  // Plugin Schema
95
96
  export * from './schema/plugin.schema.js';
96
97
  export * from './schema/update.schema.js';
98
+ export * from './schema/observability.schema.js';
99
+ export * from './schema/diagnostics.schema.js';
97
100
  //# sourceMappingURL=index.js.map
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,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"}
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;AAC5C,cAAc,2CAA2C,CAAC;AAE1D,uBAAuB;AACvB,cAAc,kCAAkC,CAAC;AAEjD,mBAAmB;AACnB,cAAc,8BAA8B,CAAC;AAE7C,gBAAgB;AAChB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=android-operator-audio.schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-operator-audio.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/android-operator-audio.schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { AndroidOperatorAudioMonitorGainUpdateSchema, AndroidOperatorAudioStatusSchema, } from '../android-operator-audio.schema.js';
3
+ describe('Android operator audio schemas', () => {
4
+ it('accepts native monitor gain telemetry and updates', () => {
5
+ const status = AndroidOperatorAudioStatusSchema.parse({
6
+ available: true,
7
+ captureState: 'idle',
8
+ monitorState: 'playing',
9
+ participantIdentity: 'android-native:operator',
10
+ inputLevel: 0,
11
+ inputPeak: 0,
12
+ inputSilenced: false,
13
+ micGainDb: 18,
14
+ micGainMinDb: -12,
15
+ micGainMaxDb: 24,
16
+ monitorGainDb: -6,
17
+ monitorGainMinDb: -60,
18
+ monitorGainMaxDb: 20,
19
+ micDevice: null,
20
+ speakerDevice: null,
21
+ lastError: null,
22
+ });
23
+ expect(status.monitorGainDb).toBe(-6);
24
+ expect(AndroidOperatorAudioMonitorGainUpdateSchema.parse({ monitorGainDb: 3 }).monitorGainDb).toBe(3);
25
+ });
26
+ });
27
+ //# sourceMappingURL=android-operator-audio.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-operator-audio.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/android-operator-audio.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,2CAA2C,EAC3C,gCAAgC,GACjC,MAAM,qCAAqC,CAAC;AAE7C,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,gCAAgC,CAAC,KAAK,CAAC;YACpD,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,SAAS;YACvB,mBAAmB,EAAE,yBAAyB;YAC9C,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,CAAC,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,CAAC,CAAC;YACjB,gBAAgB,EAAE,CAAC,EAAE;YACrB,gBAAgB,EAAE,EAAE;YACpB,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,2CAA2C,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assisted-queue.schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assisted-queue.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/assisted-queue.schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { AssistedQueueSnapshotSchema, PluginManifestSchema, WSMessageSchema, WSMessageType, } from '../../index.js';
3
+ describe('assisted queue contracts', () => {
4
+ it('accepts the compact UI projection and rejects internal queue details', () => {
5
+ const snapshot = {
6
+ version: 4,
7
+ activeEntryId: 'queue-1',
8
+ rows: [{
9
+ entryId: 'queue-1',
10
+ callsign: 'JA1AAA',
11
+ order: 0,
12
+ draggable: false,
13
+ displayState: 'engaged',
14
+ tone: 'success',
15
+ icon: 'check-circle',
16
+ }, {
17
+ entryId: 'queue-2',
18
+ callsign: 'JA2BBB',
19
+ order: 1,
20
+ draggable: true,
21
+ displayState: 'paused',
22
+ tone: 'neutral',
23
+ icon: 'pause',
24
+ pauseReason: 'stale',
25
+ targetGrid: 'PM95',
26
+ lastSnr: -12,
27
+ lastHeardCyclesAgo: 6,
28
+ }],
29
+ };
30
+ expect(AssistedQueueSnapshotSchema.parse(snapshot)).toEqual(snapshot);
31
+ expect(AssistedQueueSnapshotSchema.strict().safeParse({
32
+ ...snapshot,
33
+ evidence: { raw: 'BG5DRB JA1AAA -08' },
34
+ }).success).toBe(false);
35
+ });
36
+ it('carries the optional targetQueue strategy capability through manifests', () => {
37
+ expect(PluginManifestSchema.parse({
38
+ apiVersion: 2,
39
+ name: 'assisted-qso-queue',
40
+ version: '1.0.0',
41
+ type: 'strategy',
42
+ strategyFeatures: { targetQueue: 1 },
43
+ }).strategyFeatures).toEqual({ targetQueue: 1 });
44
+ });
45
+ it('validates enqueue, reorder, retry, remove, and clear WebSocket commands', () => {
46
+ const commands = [
47
+ {
48
+ type: WSMessageType.OPERATOR_QUEUE_ENQUEUE,
49
+ timestamp: new Date(0).toISOString(),
50
+ data: {
51
+ operatorId: 'operator-1',
52
+ callsign: 'JA1AAA',
53
+ startIfIdle: true,
54
+ selectedFrame: {
55
+ message: 'CQ JA1AAA PM95',
56
+ snr: -10,
57
+ dt: 0.1,
58
+ freq: 1500,
59
+ slotStartMs: 15_000,
60
+ },
61
+ },
62
+ },
63
+ {
64
+ type: WSMessageType.OPERATOR_QUEUE_REORDER,
65
+ timestamp: new Date(0).toISOString(),
66
+ data: {
67
+ operatorId: 'operator-1',
68
+ entryId: 'queue-2',
69
+ beforeEntryId: 'queue-1',
70
+ expectedVersion: 3,
71
+ },
72
+ },
73
+ {
74
+ type: WSMessageType.OPERATOR_QUEUE_RETRY,
75
+ timestamp: new Date(0).toISOString(),
76
+ data: {
77
+ operatorId: 'operator-1',
78
+ entryId: 'queue-2',
79
+ expectedVersion: 4,
80
+ },
81
+ },
82
+ {
83
+ type: WSMessageType.OPERATOR_QUEUE_REMOVE,
84
+ timestamp: new Date(0).toISOString(),
85
+ data: {
86
+ operatorId: 'operator-1',
87
+ entryId: 'queue-2',
88
+ expectedVersion: 5,
89
+ },
90
+ },
91
+ {
92
+ type: WSMessageType.OPERATOR_QUEUE_CLEAR,
93
+ timestamp: new Date(0).toISOString(),
94
+ data: {
95
+ operatorId: 'operator-1',
96
+ expectedVersion: 6,
97
+ },
98
+ },
99
+ ];
100
+ for (const command of commands) {
101
+ expect(WSMessageSchema.safeParse(command).success).toBe(true);
102
+ }
103
+ expect(WSMessageSchema.safeParse({
104
+ ...commands[1],
105
+ data: { ...commands[1].data, expectedVersion: -1 },
106
+ }).success).toBe(false);
107
+ expect(WSMessageSchema.safeParse({
108
+ ...commands[0],
109
+ data: { ...commands[0].data, startIfIdle: 'yes' },
110
+ }).success).toBe(false);
111
+ });
112
+ });
113
+ //# sourceMappingURL=assisted-queue.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assisted-queue.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/assisted-queue.schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audio-sidecar.schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-sidecar.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/audio-sidecar.schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { AudioSidecarStatus, AudioSidecarStatusPayloadSchema, } from '../audio-sidecar.schema.js';
3
+ describe('AudioSidecarStatusPayloadSchema', () => {
4
+ it('accepts legacy status payloads without diagnostics fields', () => {
5
+ const parsed = AudioSidecarStatusPayloadSchema.parse({
6
+ status: AudioSidecarStatus.RETRYING,
7
+ isConnected: false,
8
+ retryAttempt: 2,
9
+ nextRetryMs: 4000,
10
+ longRunning: false,
11
+ lastError: { message: 'device unavailable' },
12
+ deviceName: 'USB Audio CODEC',
13
+ });
14
+ expect(parsed.classification).toBeUndefined();
15
+ });
16
+ it('accepts runtime diagnostics and fallback details', () => {
17
+ const parsed = AudioSidecarStatusPayloadSchema.parse({
18
+ status: AudioSidecarStatus.RETRYING,
19
+ isConnected: false,
20
+ retryAttempt: 1,
21
+ nextRetryMs: 2000,
22
+ longRunning: false,
23
+ lastError: { message: 'RtApiCore: the stream device was disconnected (and closed)!' },
24
+ deviceName: 'C-Media Electronics Inc.: USB Audio Device',
25
+ phase: 'runtime',
26
+ classification: 'sample-rate-fallback',
27
+ affectedDeviceName: 'C-Media Electronics Inc.: USB Audio Device',
28
+ sampleRate: 44100,
29
+ fallback: {
30
+ active: true,
31
+ fromSampleRate: 48000,
32
+ toSampleRate: 44100,
33
+ persisted: false,
34
+ reason: 'early-rtaudio-runtime-loss',
35
+ },
36
+ retryReason: 'retrying at 44.1 kHz',
37
+ });
38
+ expect(parsed.fallback?.toSampleRate).toBe(44100);
39
+ expect(parsed.classification).toBe('sample-rate-fallback');
40
+ });
41
+ });
42
+ //# sourceMappingURL=audio-sidecar.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-sidecar.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/audio-sidecar.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,+BAA+B,GAChC,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC;YACnD,MAAM,EAAE,kBAAkB,CAAC,QAAQ;YACnC,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;YAC5C,UAAU,EAAE,iBAAiB;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC;YACnD,MAAM,EAAE,kBAAkB,CAAC,QAAQ;YACnC,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,EAAE,OAAO,EAAE,6DAA6D,EAAE;YACrF,UAAU,EAAE,4CAA4C;YACxD,KAAK,EAAE,SAAS;YAChB,cAAc,EAAE,sBAAsB;YACtC,kBAAkB,EAAE,4CAA4C;YAChE,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI;gBACZ,cAAc,EAAE,KAAK;gBACrB,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,4BAA4B;aACrC;YACD,WAAW,EAAE,sBAAsB;SACpC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { AudioDevicesResponseSchema, AudioDeviceResolutionSchema, AudioDeviceResolutionStatusSchema, AudioDeviceSettingsSchema, AudioDeviceSettingsResponseSchema, AudioOutputChannelModeSchema, AudioOutputSampleFormatSchema, AudioSettingsResolveResponseSchema, } from '../audio.schema.js';
2
+ import { AudioDevicesResponseSchema, AudioDeviceSchema, AudioDeviceResolutionSchema, AudioDeviceResolutionStatusSchema, AudioDeviceSettingsSchema, AudioDeviceSettingsResponseSchema, AudioOutputChannelModeSchema, AudioOutputSampleFormatSchema, AudioSettingsResolveRequestSchema, AudioSettingsResolveResponseSchema, } from '../audio.schema.js';
3
3
  const device = {
4
4
  id: 'input-1',
5
5
  name: 'USB Audio',
@@ -13,6 +13,55 @@ const device = {
13
13
  lastSeenAt: 1_700_000_000_000,
14
14
  };
15
15
  describe('audio device resolution schemas', () => {
16
+ it('accepts Android route identity, health, and fixed audio capabilities', () => {
17
+ const parsed = AudioDeviceSchema.parse({
18
+ ...device,
19
+ backend: 'android',
20
+ kind: 'wired-headset',
21
+ routeKey: 'android:wired-headset:input',
22
+ transport: 'analog',
23
+ connector: '3.5mm',
24
+ clientConnected: true,
25
+ routeVerified: true,
26
+ routeState: 'verified',
27
+ capabilities: {
28
+ sampleRates: [48000],
29
+ bufferSizes: [960],
30
+ channelCounts: [1],
31
+ sampleFormats: ['int16'],
32
+ channelModes: ['mono'],
33
+ sampleRateConfigurable: false,
34
+ bufferSizeConfigurable: false,
35
+ sampleFormatConfigurable: false,
36
+ channelModeConfigurable: false,
37
+ outputRouteAck: true,
38
+ fixedSampleRate: 48000,
39
+ fixedBufferSize: 960,
40
+ fixedChannelCount: 1,
41
+ },
42
+ });
43
+ expect(parsed.routeKey).toBe('android:wired-headset:input');
44
+ expect(parsed.capabilities?.fixedChannelCount).toBe(1);
45
+ expect(parsed.capabilities?.outputRouteAck).toBe(true);
46
+ });
47
+ it('accepts route loss diagnostics without treating routeVerified as required', () => {
48
+ expect(AudioDeviceSchema.parse({
49
+ ...device,
50
+ backend: 'android',
51
+ routeState: 'lost',
52
+ routeVerified: false,
53
+ failureReason: 'The headset was unplugged',
54
+ })).toMatchObject({
55
+ routeState: 'lost',
56
+ routeVerified: false,
57
+ });
58
+ expect(AudioDeviceSchema.parse({
59
+ ...device,
60
+ backend: 'android',
61
+ routeState: 'idle',
62
+ routeVerified: false,
63
+ }).failureReason).toBeUndefined();
64
+ });
16
65
  it('accepts every resolution status', () => {
17
66
  for (const status of ['selected', 'default', 'virtual-selected', 'missing']) {
18
67
  expect(AudioDeviceResolutionStatusSchema.parse(status)).toBe(status);
@@ -105,6 +154,25 @@ describe('audio device resolution schemas', () => {
105
154
  },
106
155
  }).currentSettings.outputBufferSize).toBe(1024);
107
156
  });
157
+ it('keeps stable route keys alongside legacy display names', () => {
158
+ const parsed = AudioDeviceSettingsSchema.parse({
159
+ inputDeviceName: 'Headset microphone',
160
+ inputRouteKey: 'android:wired-headset:input',
161
+ outputDeviceName: 'Headset headphones',
162
+ outputRouteKey: 'android:wired-headset:output',
163
+ });
164
+ expect(parsed).toMatchObject({
165
+ inputDeviceName: 'Headset microphone',
166
+ inputRouteKey: 'android:wired-headset:input',
167
+ outputDeviceName: 'Headset headphones',
168
+ outputRouteKey: 'android:wired-headset:output',
169
+ });
170
+ expect(AudioDeviceSettingsSchema.parse({ inputDeviceName: 'Legacy USB Audio' })).toEqual({
171
+ inputDeviceName: 'Legacy USB Audio',
172
+ });
173
+ expect(AudioDeviceSettingsSchema.parse({ inputRouteKey: null })).toEqual({ inputRouteKey: null });
174
+ expect(() => AudioDeviceSettingsSchema.parse({ inputRouteKey: '' })).toThrow();
175
+ });
108
176
  it('accepts and validates output diagnostic audio settings', () => {
109
177
  expect(AudioOutputSampleFormatSchema.parse('int16')).toBe('int16');
110
178
  expect(AudioOutputChannelModeSchema.parse('both')).toBe('both');
@@ -118,6 +186,19 @@ describe('audio device resolution schemas', () => {
118
186
  expect(() => AudioDeviceSettingsSchema.parse({ outputSampleFormat: 'int24' })).toThrow();
119
187
  expect(() => AudioDeviceSettingsSchema.parse({ outputChannelMode: 'stereo' })).toThrow();
120
188
  });
189
+ it('accepts Icom USB IF input signal type and center frequency', () => {
190
+ expect(AudioDeviceSettingsSchema.parse({
191
+ inputSignalType: 'icom-12k-if',
192
+ ifCenterHz: 12000,
193
+ })).toMatchObject({
194
+ inputSignalType: 'icom-12k-if',
195
+ ifCenterHz: 12000,
196
+ });
197
+ expect(AudioDeviceSettingsSchema.parse({ inputSignalType: 'af' }).inputSignalType).toBe('af');
198
+ expect(() => AudioDeviceSettingsSchema.parse({ inputSignalType: 'wlan-if' })).toThrow();
199
+ expect(() => AudioDeviceSettingsSchema.parse({ ifCenterHz: 0 })).toThrow();
200
+ expect(() => AudioDeviceSettingsSchema.parse({ ifCenterHz: 25000 })).toThrow();
201
+ });
121
202
  it('accepts resolve responses with every supported status', () => {
122
203
  for (const status of ['selected', 'default', 'virtual-selected', 'missing']) {
123
204
  expect(AudioSettingsResolveResponseSchema.parse({
@@ -139,5 +220,15 @@ describe('audio device resolution schemas', () => {
139
220
  }).deviceResolution.input.status).toBe(status);
140
221
  }
141
222
  });
223
+ it('accepts TCI as a radio-audio resolution request context', () => {
224
+ const parsed = AudioSettingsResolveRequestSchema.parse({
225
+ radioType: 'tci',
226
+ audio: {
227
+ inputDeviceName: 'TCI Audio',
228
+ outputDeviceName: 'TCI Audio',
229
+ },
230
+ });
231
+ expect(parsed.radioType).toBe('tci');
232
+ });
142
233
  });
143
234
  //# sourceMappingURL=audio.schema.test.js.map
@@ -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,yBAAyB,EACzB,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,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;IACtB,YAAY,EAAE,WAAoB;IAClC,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,iBAAiB;CAC9B,CAAC;AAEF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,KAAK,MAAM,MAAM,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,iCAAiC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC;YACvC,oBAAoB,EAAE,WAAW;YACjC,gBAAgB,EAAE,MAAM;YACxB,eAAe,EAAE,MAAM;YACvB,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,iCAAiC,CAAC,KAAK,CAAC;YACrD,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE;YACzE,gBAAgB,EAAE;gBAChB,KAAK,EAAE;oBACL,oBAAoB,EAAE,WAAW;oBACjC,gBAAgB,EAAE,MAAM;oBACxB,eAAe,EAAE,MAAM;oBACvB,MAAM,EAAE,UAAU;iBACnB;gBACD,MAAM,EAAE;oBACN,oBAAoB,EAAE,IAAI;oBAC1B,gBAAgB,EAAE,IAAI;oBACtB,eAAe,EAAE,IAAI;oBACrB,MAAM,EAAE,SAAS;iBAClB;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAC9C,YAAY,EAAE,CAAC,MAAM,CAAC;YACtB,aAAa,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC9D,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;YAC5C,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,iCAAiC,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACxD,gBAAgB,EAAE;gBAChB,KAAK,EAAE;oBACL,oBAAoB,EAAE,IAAI;oBAC1B,gBAAgB,EAAE,IAAI;oBACtB,eAAe,EAAE,MAAM;oBACvB,MAAM,EAAE,SAAS;iBAClB;gBACD,MAAM,EAAE;oBACN,oBAAoB,EAAE,IAAI;oBAC1B,gBAAgB,EAAE,IAAI;oBACtB,eAAe,EAAE,MAAM;oBACvB,MAAM,EAAE,SAAS;iBAClB;aACF;SACF,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,CAAC,iCAAiC,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,IAAI;YACb,eAAe,EAAE;gBACf,eAAe,EAAE,KAAK;gBACtB,gBAAgB,EAAE,KAAK;gBACvB,eAAe,EAAE,GAAG;gBACpB,gBAAgB,EAAE,IAAI;aACvB;YACD,gBAAgB,EAAE;gBAChB,KAAK,EAAE;oBACL,oBAAoB,EAAE,IAAI;oBAC1B,gBAAgB,EAAE,IAAI;oBACtB,eAAe,EAAE,MAAM;oBACvB,MAAM,EAAE,SAAS;iBAClB;gBACD,MAAM,EAAE;oBACN,oBAAoB,EAAE,IAAI;oBAC1B,gBAAgB,EAAE,IAAI;oBACtB,eAAe,EAAE,MAAM;oBACvB,MAAM,EAAE,SAAS;iBAClB;aACF;SACF,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC;YACrC,kBAAkB,EAAE,OAAO;YAC3B,iBAAiB,EAAE,OAAO;SAC3B,CAAC,CAAC,CAAC,aAAa,CAAC;YAChB,kBAAkB,EAAE,OAAO;YAC3B,iBAAiB,EAAE,OAAO;SAC3B,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACzF,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,KAAK,MAAM,MAAM,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,CAAU,EAAE,CAAC;YACrF,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC;gBAC9C,OAAO,EAAE,IAAI;gBACb,gBAAgB,EAAE;oBAChB,KAAK,EAAE;wBACL,oBAAoB,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;wBAC/D,gBAAgB,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;wBACvD,eAAe,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;wBACrD,MAAM;qBACP;oBACD,MAAM,EAAE;wBACN,oBAAoB,EAAE,IAAI;wBAC1B,gBAAgB,EAAE,IAAI;wBACtB,eAAe,EAAE,MAAM;wBACvB,MAAM,EAAE,SAAS;qBAClB;iBACF;aACF,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diagnostics.schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/diagnostics.schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { CreateDiagnosticUploadRequestSchema } from '../diagnostics.schema.js';
3
+ describe('diagnostic upload request schema', () => {
4
+ it('accepts one supported source and a bounded range', () => {
5
+ expect(CreateDiagnosticUploadRequestSchema.parse({
6
+ sourceId: 'server',
7
+ fromMs: 1_777_000_000_000,
8
+ toMs: 1_777_003_600_000,
9
+ feedback: ' Radio stopped ',
10
+ })).toMatchObject({ sourceId: 'server', feedback: 'Radio stopped' });
11
+ });
12
+ it('rejects arbitrary sources, oversized feedback, and ranges over seven days', () => {
13
+ expect(() => CreateDiagnosticUploadRequestSchema.parse({
14
+ sourceId: '/tmp/arbitrary.log',
15
+ fromMs: 1_777_000_000_000,
16
+ toMs: 1_777_003_600_000,
17
+ })).toThrow();
18
+ expect(() => CreateDiagnosticUploadRequestSchema.parse({
19
+ sourceId: 'server',
20
+ fromMs: 1_777_000_000_000,
21
+ toMs: 1_777_000_000_000 + (8 * 24 * 60 * 60 * 1000),
22
+ })).toThrow();
23
+ expect(() => CreateDiagnosticUploadRequestSchema.parse({
24
+ sourceId: 'server',
25
+ fromMs: 1_777_000_000_000,
26
+ toMs: 1_777_003_600_000,
27
+ feedback: 'x'.repeat(2001),
28
+ })).toThrow();
29
+ });
30
+ });
31
+ //# sourceMappingURL=diagnostics.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/diagnostics.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mCAAmC,EAAE,MAAM,0BAA0B,CAAC;AAE/E,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,mCAAmC,CAAC,KAAK,CAAC;YAC/C,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,mBAAmB;SAC9B,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,CAAC,GAAG,EAAE,CAAC,mCAAmC,CAAC,KAAK,CAAC;YACrD,QAAQ,EAAE,oBAAoB;YAC9B,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,iBAAiB;SACxB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,EAAE,CAAC,mCAAmC,CAAC,KAAK,CAAC;YACrD,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;SACpD,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,EAAE,CAAC,mCAAmC,CAAC,KAAK,CAAC;YACrD,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logbook-health.schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logbook-health.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/logbook-health.schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { CreateLogbookBackupRequestSchema, LogBookInfoSchema, LogbookHealthSchema, RestoreLogbookRequestSchema, WSMessageSchema, WSMessageType, } from '../../index.js';
3
+ const loadingHealth = {
4
+ state: 'loading',
5
+ readable: false,
6
+ writable: false,
7
+ issues: [],
8
+ updatedAt: 1_775_394_000_000,
9
+ };
10
+ describe('logbook health contracts', () => {
11
+ it('requires every logbook listing to expose health', () => {
12
+ const info = {
13
+ id: 'logbook-N0CALL',
14
+ name: 'N0CALL QSO Log',
15
+ fileName: 'N0CALL.adi',
16
+ storageKind: 'managed',
17
+ createdAt: 1,
18
+ lastUsed: 2,
19
+ isActive: true,
20
+ };
21
+ expect(LogBookInfoSchema.safeParse(info).success).toBe(false);
22
+ const parsed = LogBookInfoSchema.parse({ ...info, health: loadingHealth });
23
+ expect(parsed.health).toEqual(loadingHealth);
24
+ expect(parsed).not.toHaveProperty('filePath');
25
+ });
26
+ it('rejects path-bearing fields in backup and restore mutations', () => {
27
+ expect(CreateLogbookBackupRequestSchema.safeParse({
28
+ filePath: '/tmp/escape.adi',
29
+ }).success).toBe(false);
30
+ expect(RestoreLogbookRequestSchema.safeParse({
31
+ preflightToken: 'preflight-token-1',
32
+ confirmation: 'logbook-N0CALL',
33
+ artifactPath: '../another.adi',
34
+ }).success).toBe(false);
35
+ });
36
+ it('rejects negative affected record and byte counts', () => {
37
+ expect(LogbookHealthSchema.safeParse({
38
+ ...loadingHealth,
39
+ issues: [{
40
+ code: 'OPAQUE_RECORDS',
41
+ message: 'One record was skipped',
42
+ affectedRecords: -1,
43
+ affectedBytes: -1,
44
+ occurredAt: loadingHealth.updatedAt,
45
+ }],
46
+ }).success).toBe(false);
47
+ });
48
+ it('validates health and write-failure websocket payloads', () => {
49
+ expect(WSMessageSchema.safeParse({
50
+ type: WSMessageType.LOGBOOK_HEALTH_CHANGED,
51
+ timestamp: new Date().toISOString(),
52
+ data: { logBookId: 'logbook-N0CALL', health: loadingHealth },
53
+ }).success).toBe(true);
54
+ expect(WSMessageSchema.safeParse({
55
+ type: WSMessageType.LOGBOOK_WRITE_FAILED,
56
+ timestamp: new Date().toISOString(),
57
+ data: {
58
+ logBookId: 'logbook-N0CALL',
59
+ operatorId: 'operator-1',
60
+ attemptId: 'attempt-12345678',
61
+ unsavedCount: 1,
62
+ error: {
63
+ code: 'LOGBOOK_WRITE_FAILED',
64
+ message: 'No space left on device',
65
+ systemCode: 'ENOSPC',
66
+ occurredAt: loadingHealth.updatedAt,
67
+ },
68
+ },
69
+ }).success).toBe(true);
70
+ expect(WSMessageSchema.safeParse({
71
+ type: WSMessageType.LOGBOOK_WRITE_FAILED,
72
+ timestamp: new Date().toISOString(),
73
+ data: {
74
+ logBookId: 'logbook-N0CALL',
75
+ qsoRecord: {
76
+ id: 'private-qso',
77
+ callsign: 'N0CALL',
78
+ frequency: 14_074_000,
79
+ mode: 'FT8',
80
+ startTime: loadingHealth.updatedAt,
81
+ messageHistory: ['CQ N0CALL AA00'],
82
+ },
83
+ error: {
84
+ code: 'LOGBOOK_WRITE_FAILED',
85
+ message: 'write failed',
86
+ occurredAt: loadingHealth.updatedAt,
87
+ },
88
+ },
89
+ }).success).toBe(false);
90
+ expect(WSMessageSchema.safeParse({
91
+ type: WSMessageType.LOGBOOK_WRITE_FAILED,
92
+ timestamp: new Date().toISOString(),
93
+ data: {
94
+ logBookId: 'logbook-N0CALL',
95
+ error: {
96
+ code: 'ARBITRARY_ERROR',
97
+ message: 'Unstable error code',
98
+ occurredAt: loadingHealth.updatedAt,
99
+ },
100
+ },
101
+ }).success).toBe(false);
102
+ });
103
+ });
104
+ //# sourceMappingURL=logbook-health.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logbook-health.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/logbook-health.schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=observability.schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.schema.test.d.ts","sourceRoot":"","sources":["../../../src/schema/__tests__/observability.schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { OBSERVABILITY_NOTICE_VERSION, UpdateObservabilitySettingsSchema, } from '../observability.schema.js';
3
+ describe('observability settings schema', () => {
4
+ it('requires acknowledgment of the current notice', () => {
5
+ expect(UpdateObservabilitySettingsSchema.parse({
6
+ enabled: true,
7
+ noticeVersion: OBSERVABILITY_NOTICE_VERSION,
8
+ })).toEqual({ enabled: true, noticeVersion: 1 });
9
+ expect(() => UpdateObservabilitySettingsSchema.parse({ enabled: true, noticeVersion: 0 })).toThrow();
10
+ });
11
+ });
12
+ //# sourceMappingURL=observability.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/observability.schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,iCAAiC,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,4BAA4B;SAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACvG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}