wsjtx-lib 1.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 (39) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +390 -0
  3. package/dist/src/index.d.ts +180 -0
  4. package/dist/src/index.d.ts.map +1 -0
  5. package/dist/src/index.js +402 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/types.d.ts +251 -0
  8. package/dist/src/types.d.ts.map +1 -0
  9. package/dist/src/types.js +100 -0
  10. package/dist/src/types.js.map +1 -0
  11. package/dist/test/wsjtx.basic.test.d.ts +7 -0
  12. package/dist/test/wsjtx.basic.test.d.ts.map +1 -0
  13. package/dist/test/wsjtx.basic.test.js +220 -0
  14. package/dist/test/wsjtx.basic.test.js.map +1 -0
  15. package/dist/test/wsjtx.test.d.ts +12 -0
  16. package/dist/test/wsjtx.test.d.ts.map +1 -0
  17. package/dist/test/wsjtx.test.js +618 -0
  18. package/dist/test/wsjtx.test.js.map +1 -0
  19. package/package.json +88 -0
  20. package/prebuilds/darwin-arm64/build-info.json +10 -0
  21. package/prebuilds/darwin-arm64/libfftw3f.3.dylib +0 -0
  22. package/prebuilds/darwin-arm64/libfftw3f_threads.3.dylib +0 -0
  23. package/prebuilds/darwin-arm64/libgfortran.5.dylib +0 -0
  24. package/prebuilds/darwin-arm64/wsjtx_lib_nodejs.node +0 -0
  25. package/prebuilds/linux-x64/build-info.json +10 -0
  26. package/prebuilds/linux-x64/libfftw3f.so.3 +0 -0
  27. package/prebuilds/linux-x64/libfftw3f_threads.so.3 +0 -0
  28. package/prebuilds/linux-x64/libgcc_s.so.1 +0 -0
  29. package/prebuilds/linux-x64/libgfortran.so.5 +0 -0
  30. package/prebuilds/linux-x64/wsjtx_lib_nodejs.node +0 -0
  31. package/prebuilds/package-info.json +25 -0
  32. package/prebuilds/win32-x64/build-info.json +14 -0
  33. package/prebuilds/win32-x64/libfftw3f-3.dll +0 -0
  34. package/prebuilds/win32-x64/libfftw3f_threads-3.dll +0 -0
  35. package/prebuilds/win32-x64/libgcc_s_seh-1.dll +0 -0
  36. package/prebuilds/win32-x64/libgfortran-5.dll +0 -0
  37. package/prebuilds/win32-x64/libstdc++-6.dll +0 -0
  38. package/prebuilds/win32-x64/libwinpthread-1.dll +0 -0
  39. package/prebuilds/win32-x64/wsjtx_lib_nodejs.node +0 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * WSJTX Digital Radio Protocol Library for Node.js
3
+ *
4
+ * This library provides encoding and decoding capabilities for various
5
+ * digital amateur radio protocols including FT8, FT4, WSPR, and others.
6
+ *
7
+ * The library is a Node.js C++ extension that wraps the wsjtx_lib C library,
8
+ * providing high-performance digital signal processing capabilities with
9
+ * multi-platform support (Windows, macOS, Linux).
10
+ *
11
+ * @version 1.0.0
12
+ * @author WSJTX Development Team
13
+ * @license GPL-3.0
14
+ */
15
+ /**
16
+ * Supported WSJTX digital radio modes
17
+ *
18
+ * Each mode has different characteristics in terms of symbol rate,
19
+ * bandwidth, transmission duration, and sensitivity.
20
+ */
21
+ export var WSJTXMode;
22
+ (function (WSJTXMode) {
23
+ /**
24
+ * FT8 - 8-FSK modulation, 15-second transmissions
25
+ * - Sample rate: 48 kHz
26
+ * - Duration: 12.64 seconds
27
+ * - Bandwidth: ~50 Hz
28
+ * - Sensitivity: -24 dB
29
+ */
30
+ WSJTXMode[WSJTXMode["FT8"] = 0] = "FT8";
31
+ /**
32
+ * FT4 - 4-FSK modulation, 6-second transmissions
33
+ * - Sample rate: 48 kHz
34
+ * - Duration: 6.0 seconds
35
+ * - Bandwidth: ~80 Hz
36
+ * - Sensitivity: -17 dB
37
+ */
38
+ WSJTXMode[WSJTXMode["FT4"] = 1] = "FT4";
39
+ /**
40
+ * JT4 - Weak signal mode for microwave EME
41
+ * - Sample rate: 11.025 kHz
42
+ * - Duration: 47.1 seconds
43
+ * - Multiple bandwidth options
44
+ */
45
+ WSJTXMode[WSJTXMode["JT4"] = 2] = "JT4";
46
+ /**
47
+ * JT65 - Popular EME and HF weak signal mode
48
+ * - Sample rate: 11.025 kHz
49
+ * - Duration: 46.8 seconds
50
+ * - Bandwidth: ~180 Hz
51
+ */
52
+ WSJTXMode[WSJTXMode["JT65"] = 3] = "JT65";
53
+ /**
54
+ * JT9 - Low data rate, narrow bandwidth mode
55
+ * - Sample rate: 12 kHz
56
+ * - Duration: 49.0 seconds
57
+ * - Bandwidth: ~16 Hz
58
+ */
59
+ WSJTXMode[WSJTXMode["JT9"] = 4] = "JT9";
60
+ /**
61
+ * FST4 - Flexible format for 15-900 second transmissions
62
+ * - Sample rate: 12 kHz
63
+ * - Variable duration (15s, 30s, 60s, 120s, 300s, 900s)
64
+ * - Ultra-weak signal capability
65
+ */
66
+ WSJTXMode[WSJTXMode["FST4"] = 5] = "FST4";
67
+ /**
68
+ * Q65 - Optimized for EME on VHF and higher
69
+ * - Sample rate: 12 kHz
70
+ * - Duration: 60 seconds
71
+ * - Multiple bandwidth options
72
+ */
73
+ WSJTXMode[WSJTXMode["Q65"] = 6] = "Q65";
74
+ /**
75
+ * FST4W - Weak signal beacons
76
+ * - Sample rate: 12 kHz
77
+ * - Duration: 120 seconds
78
+ * - Optimized for propagation studies
79
+ */
80
+ WSJTXMode[WSJTXMode["FST4W"] = 7] = "FST4W";
81
+ /**
82
+ * WSPR - Weak Signal Propagation Reporter
83
+ * - Sample rate: 12 kHz
84
+ * - Duration: 110.6 seconds
85
+ * - 4-FSK modulation, very weak signal capability
86
+ */
87
+ WSJTXMode[WSJTXMode["WSPR"] = 8] = "WSPR";
88
+ })(WSJTXMode || (WSJTXMode = {}));
89
+ /**
90
+ * Error thrown by WSJTX library operations
91
+ */
92
+ export class WSJTXError extends Error {
93
+ code;
94
+ constructor(message, code) {
95
+ super(message);
96
+ this.code = code;
97
+ this.name = 'WSJTXError';
98
+ }
99
+ }
100
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,MAAM,CAAN,IAAY,SA0EX;AA1ED,WAAY,SAAS;IACjB;;;;;;OAMG;IACH,uCAAO,CAAA;IAEP;;;;;;OAMG;IACH,uCAAO,CAAA;IAEP;;;;;OAKG;IACH,uCAAO,CAAA;IAEP;;;;;OAKG;IACH,yCAAQ,CAAA;IAER;;;;;OAKG;IACH,uCAAO,CAAA;IAEP;;;;;OAKG;IACH,yCAAQ,CAAA;IAER;;;;;OAKG;IACH,uCAAO,CAAA;IAEP;;;;;OAKG;IACH,2CAAS,CAAA;IAET;;;;;OAKG;IACH,yCAAQ,CAAA;AACZ,CAAC,EA1EW,SAAS,KAAT,SAAS,QA0EpB;AAgHD;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACG;IAApC,YAAY,OAAe,EAAS,IAAa;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QADiB,SAAI,GAAJ,IAAI,CAAS;QAE7C,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC7B,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * WSJTX Library Basic Test Suite
3
+ *
4
+ * Tests core functionalities suitable for CI.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=wsjtx.basic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsjtx.basic.test.d.ts","sourceRoot":"","sources":["../../test/wsjtx.basic.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * WSJTX Library Basic Test Suite
3
+ *
4
+ * Tests core functionalities suitable for CI.
5
+ */
6
+ import { describe, it, beforeEach, afterEach } from 'node:test';
7
+ import assert from 'node:assert';
8
+ // Import WSJTX library and types
9
+ import { WSJTXLib, WSJTXMode, WSJTXError } from '../src/index.js';
10
+ describe('WSJTX Library Basic Tests', () => {
11
+ let lib;
12
+ beforeEach(() => {
13
+ lib = new WSJTXLib({
14
+ maxThreads: 4,
15
+ debug: true
16
+ });
17
+ });
18
+ afterEach(() => {
19
+ // Clean up resources if any were created by basic tests
20
+ });
21
+ describe('Basic Functionality Tests', () => {
22
+ it('should create library instance', () => {
23
+ assert.ok(lib instanceof WSJTXLib);
24
+ });
25
+ it('should support custom configuration', () => {
26
+ const customLib = new WSJTXLib({
27
+ maxThreads: 8,
28
+ debug: false
29
+ });
30
+ assert.ok(customLib instanceof WSJTXLib);
31
+ });
32
+ it('should return correct FT8 sample rate', () => {
33
+ const sampleRate = lib.getSampleRate(WSJTXMode.FT8);
34
+ assert.strictEqual(sampleRate, 48000);
35
+ });
36
+ it('should return correct FT8 transmission duration', () => {
37
+ const duration = lib.getTransmissionDuration(WSJTXMode.FT8);
38
+ assert.ok(Math.abs(duration - 12.64) < 0.1);
39
+ });
40
+ it('should correctly check encoding support', () => {
41
+ assert.strictEqual(lib.isEncodingSupported(WSJTXMode.FT8), true);
42
+ assert.strictEqual(lib.isDecodingSupported(WSJTXMode.FT8), true);
43
+ });
44
+ it('should return all mode capabilities', () => {
45
+ const capabilities = lib.getAllModeCapabilities();
46
+ assert.ok(capabilities.length > 0);
47
+ assert.ok('mode' in capabilities[0]);
48
+ assert.ok('encodingSupported' in capabilities[0]);
49
+ assert.ok('decodingSupported' in capabilities[0]);
50
+ assert.ok('sampleRate' in capabilities[0]);
51
+ assert.ok('duration' in capabilities[0]);
52
+ });
53
+ });
54
+ describe('Parameter Validation Tests', () => {
55
+ it('should validate mode parameter', async () => {
56
+ const audioData = new Float32Array(1000);
57
+ await assert.rejects(lib.decode(999, audioData, 1000), WSJTXError);
58
+ });
59
+ it('should validate frequency parameter', async () => {
60
+ const audioData = new Float32Array(1000);
61
+ await assert.rejects(lib.decode(WSJTXMode.FT8, audioData, -1000), WSJTXError);
62
+ });
63
+ it('should validate audio data parameter', async () => {
64
+ await assert.rejects(lib.decode(WSJTXMode.FT8, new Float32Array(0), 1000), WSJTXError);
65
+ });
66
+ it('should validate message parameter', async () => {
67
+ await assert.rejects(lib.encode(WSJTXMode.FT8, '', 1000), WSJTXError);
68
+ await assert.rejects(lib.encode(WSJTXMode.FT8, 'x'.repeat(30), 1000), WSJTXError);
69
+ });
70
+ });
71
+ describe('Message Queue Tests', () => {
72
+ it('should pull messages from queue', () => {
73
+ const messages = lib.pullMessages();
74
+ assert.ok(Array.isArray(messages));
75
+ });
76
+ it('should clear message queue', () => {
77
+ // Pull messages twice to ensure queue is cleared
78
+ lib.pullMessages();
79
+ const messages = lib.pullMessages();
80
+ assert.strictEqual(messages.length, 0);
81
+ });
82
+ });
83
+ describe('Audio Format Conversion Tests', () => {
84
+ it('should convert Float32Array to Int16Array', () => {
85
+ const floatData = new Float32Array([0.0, 0.5, -0.5, 1.0, -1.0]);
86
+ const intData = WSJTXLib.convertAudioFormat(floatData, 'int16');
87
+ assert.ok(intData instanceof Int16Array);
88
+ assert.strictEqual(intData.length, floatData.length);
89
+ assert.strictEqual(intData[0], 0);
90
+ assert.ok(Math.abs(intData[1] - 16384) < 10);
91
+ assert.ok(Math.abs(intData[2] + 16384) < 10);
92
+ assert.ok(Math.abs(intData[3] - 32767) < 10);
93
+ assert.ok(Math.abs(intData[4] + 32767) < 10);
94
+ });
95
+ it('should convert Int16Array to Float32Array', () => {
96
+ const intData = new Int16Array([0, 16384, -16384, 32767, -32767]);
97
+ const floatData = WSJTXLib.convertAudioFormat(intData, 'float32');
98
+ assert.ok(floatData instanceof Float32Array);
99
+ assert.strictEqual(floatData.length, intData.length);
100
+ assert.ok(Math.abs(floatData[0] - 0.0) < 0.001);
101
+ assert.ok(Math.abs(floatData[1] - 0.5) < 0.001);
102
+ assert.ok(Math.abs(floatData[2] + 0.5) < 0.001);
103
+ assert.ok(Math.abs(floatData[3] - 1.0) < 0.001);
104
+ assert.ok(Math.abs(floatData[4] + 1.0) < 0.001);
105
+ });
106
+ it('should handle edge cases in conversion', () => {
107
+ // Test empty arrays
108
+ const emptyFloat = new Float32Array(0);
109
+ const emptyInt = WSJTXLib.convertAudioFormat(emptyFloat, 'int16');
110
+ assert.strictEqual(emptyInt.length, 0);
111
+ const emptyInt16 = new Int16Array(0);
112
+ const emptyFloat32 = WSJTXLib.convertAudioFormat(emptyInt16, 'float32');
113
+ assert.strictEqual(emptyFloat32.length, 0);
114
+ });
115
+ it('should maintain precision in round-trip conversion', () => {
116
+ const originalData = new Float32Array(1000);
117
+ for (let i = 0; i < originalData.length; i++) {
118
+ originalData[i] = (Math.random() - 0.5) * 2; // Range -1 to 1
119
+ }
120
+ // Convert to Int16Array and back
121
+ const intData = WSJTXLib.convertAudioFormat(originalData, 'int16');
122
+ const convertedData = WSJTXLib.convertAudioFormat(intData, 'float32');
123
+ // Check precision
124
+ let maxError = 0;
125
+ for (let i = 0; i < originalData.length; i++) {
126
+ const error = Math.abs(originalData[i] - convertedData[i]);
127
+ maxError = Math.max(maxError, error);
128
+ }
129
+ // Should be very close (16-bit precision)
130
+ assert.ok(maxError < 0.001);
131
+ });
132
+ it('should handle invalid format parameter', () => {
133
+ const floatData = new Float32Array([0.5]);
134
+ assert.throws(() => {
135
+ WSJTXLib.convertAudioFormat(floatData, 'invalid');
136
+ });
137
+ });
138
+ });
139
+ describe('TypeScript Type Safety Tests', () => {
140
+ it('should provide complete type support for basic types', () => {
141
+ const capabilities = lib.getAllModeCapabilities();
142
+ assert.ok(capabilities.length > 0);
143
+ capabilities.forEach((cap) => {
144
+ const modeName = WSJTXMode[cap.mode];
145
+ assert.strictEqual(typeof modeName, 'string');
146
+ assert.strictEqual(typeof cap.sampleRate, 'number');
147
+ assert.strictEqual(typeof cap.duration, 'number');
148
+ assert.strictEqual(typeof cap.encodingSupported, 'boolean');
149
+ assert.strictEqual(typeof cap.decodingSupported, 'boolean');
150
+ });
151
+ });
152
+ it('should provide type-safe message objects', () => {
153
+ const messages = lib.pullMessages();
154
+ messages.forEach((msg) => {
155
+ assert.strictEqual(typeof msg.text, 'string');
156
+ assert.strictEqual(typeof msg.snr, 'number');
157
+ assert.strictEqual(typeof msg.deltaTime, 'number');
158
+ assert.strictEqual(typeof msg.deltaFrequency, 'number');
159
+ });
160
+ });
161
+ it('should enforce enum constraints', () => {
162
+ const validMode = WSJTXMode.FT8;
163
+ assert.strictEqual(typeof validMode, 'number');
164
+ assert.ok(validMode >= 0);
165
+ });
166
+ });
167
+ describe('Error Handling Tests', () => {
168
+ it('should throw WSJTXError for invalid operations (non-encode/decode)', async () => {
169
+ // Example: Invalid mode in getSampleRate (if such validation existed or was more strict)
170
+ // For now, using existing validation tests that fit "basic" criteria.
171
+ try {
172
+ await lib.decode(999, new Float32Array(1000), 1000);
173
+ assert.fail('Should have thrown WSJTXError for invalid mode');
174
+ }
175
+ catch (error) {
176
+ assert.ok(error instanceof WSJTXError);
177
+ assert.strictEqual(typeof error.message, 'string');
178
+ if (error instanceof WSJTXError) {
179
+ assert.strictEqual(typeof error.code, 'string');
180
+ }
181
+ }
182
+ });
183
+ it('should provide meaningful error messages for basic errors', async () => {
184
+ try {
185
+ await lib.encode(WSJTXMode.FT8, '', 1000); // Empty message
186
+ assert.fail('Should have thrown WSJTXError for empty message');
187
+ }
188
+ catch (error) {
189
+ assert.ok(error instanceof WSJTXError);
190
+ assert.ok(error.message.length > 0);
191
+ if (error instanceof WSJTXError && error.code) {
192
+ assert.ok(error.code.length > 0);
193
+ }
194
+ }
195
+ });
196
+ it('should validate all error codes are strings for basic errors', async () => {
197
+ const testCases = [
198
+ () => lib.decode(999, new Float32Array(1000), 1000), // Invalid mode
199
+ () => lib.decode(WSJTXMode.FT8, new Float32Array(1000), -1000), // Invalid frequency
200
+ () => lib.decode(WSJTXMode.FT8, new Float32Array(0), 1000), // Invalid audio data
201
+ () => lib.encode(WSJTXMode.FT8, '', 1000), // Empty message
202
+ () => lib.encode(WSJTXMode.FT8, 'x'.repeat(50), 1000) // Message too long
203
+ ];
204
+ for (const testCase of testCases) {
205
+ try {
206
+ await testCase();
207
+ assert.fail('Should have thrown WSJTXError');
208
+ }
209
+ catch (error) {
210
+ assert.ok(error instanceof WSJTXError);
211
+ if (error instanceof WSJTXError && error.code) {
212
+ assert.strictEqual(typeof error.code, 'string');
213
+ assert.ok(error.code.length > 0);
214
+ }
215
+ }
216
+ }
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=wsjtx.basic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsjtx.basic.test.js","sourceRoot":"","sources":["../../test/wsjtx.basic.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * WSJTX Library Comprehensive Test Suite
3
+ *
4
+ * Integrated complete testing of all features, including:
5
+ * - Basic library functionality tests
6
+ * - FT8 WAV audio encoding/decoding tests
7
+ * - Audio format conversion tests
8
+ * - TypeScript type safety tests
9
+ * - Error handling tests
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=wsjtx.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsjtx.test.d.ts","sourceRoot":"","sources":["../../test/wsjtx.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}